{
  "contractName": "DepositUtils",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_pubkeyY",
          "type": "bytes32"
        }
      ],
      "name": "determineCompressionPrefix",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_pubkeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_pubkeyY",
          "type": "bytes32"
        }
      ],
      "name": "compressPubkey",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "bytes8",
          "name": "_b",
          "type": "bytes8"
        }
      ],
      "name": "bytes8LEToUint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes8\",\"name\":\"_b\",\"type\":\"bytes8\"}],\"name\":\"bytes8LEToUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_pubkeyX\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_pubkeyY\",\"type\":\"bytes32\"}],\"name\":\"compressPubkey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_pubkeyY\",\"type\":\"bytes32\"}],\"name\":\"determineCompressionPrefix\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"auctionValue(DepositUtils.Deposit storage)\":{\"details\":\"We calculate the % of the auction that has elapsed, then scale the value up.\",\"params\":{\"_d\":\"Deposit storage pointer.\"},\"return\":\"The value in wei to distribute in the auction at the current time.\"},\"bytes8LEToUint(bytes8)\":{\"details\":\"Do this by converting to bytes, then reversing endianness, then converting to int.\",\"return\":\"The uint256 represented in LE by the bytes8.\"},\"checkProofFromTxId(DepositUtils.Deposit storage,bytes32,bytes,uint256,bytes)\":{\"details\":\"Stateless SPV Proof verification documented elsewhere (see https://github.com/summa-tx/bitcoin-spv).\",\"params\":{\"_bitcoinHeaders\":\"An array of tightly-packed bitcoin headers.\",\"_d\":\"Deposit storage pointer.\",\"_merkleProof\":\"The merkle proof of inclusion of the tx in the bitcoin block.\",\"_txId\":\"The bitcoin txid of the tx that is purportedly included in the header chain.\",\"_txIndexInBlock\":\"The index of the tx in the Bitcoin block (0-indexed).\"}},\"compressPubkey(bytes32,bytes32)\":{\"details\":\"Converts the 64-byte key to a 33-byte key, bitcoin-style.\",\"params\":{\"_pubkeyX\":\"The X coordinate of the public key.\",\"_pubkeyY\":\"The Y coordinate of the public key.\"},\"return\":\"The 33-byte compressed pubkey.\"},\"currentBlockDifficulty(DepositUtils.Deposit storage)\":{\"details\":\"Calls the light relay and gets the current block difficulty.\",\"return\":\"The difficulty.\"},\"depositOwner(DepositUtils.Deposit storage)\":{\"details\":\"We cast the address to a uint256 to match the 721 standard.\",\"return\":\"The current deposit beneficiary.\"},\"determineCompressionPrefix(bytes32)\":{\"details\":\"The prefix encodes the parity of the Y coordinate.\",\"params\":{\"_pubkeyY\":\"The Y coordinate of the public key.\"},\"return\":\"The 1-byte prefix for the compressed key.\"},\"evaluateProofDifficulty(DepositUtils.Deposit storage,bytes)\":{\"details\":\"Uses the light oracle to source recent difficulty.\",\"params\":{\"_bitcoinHeaders\":\"The header chain to evaluate.\"},\"return\":\"True if acceptable, otherwise revert.\"},\"feeRebateTokenHolder(DepositUtils.Deposit storage)\":{\"return\":\"The current token holder if the Token exists.                 address(0) if the token does not exist.\"},\"fetchBitcoinPrice(DepositUtils.Deposit storage)\":{\"details\":\"Polls the price feed via the system contract.\",\"return\":\"The current price of 1 sat in wei.\"},\"fetchBondAmount(DepositUtils.Deposit storage)\":{\"details\":\"Calls the keep contract to do so.\",\"return\":\"The amount of bonded ETH in wei.\"},\"findAndParseFundingOutput(DepositUtils.Deposit storage,bytes,uint8)\":{\"details\":\"Gets `_fundingOutputIndex` output from the output vector and validates if it is                             a p2wpkh output with public key hash matching this deposit's public key hash.\",\"params\":{\"_d\":\"Deposit storage pointer.\",\"_fundingOutputIndex\":\"Index of funding output in _txOutputVector.\",\"_txOutputVector\":\"All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC outputs.\"},\"return\":\"Funding value.\"},\"lotSizeTbtc(DepositUtils.Deposit storage)\":{\"return\":\"uint256 lot size in 10**18 decimals.\"},\"previousBlockDifficulty(DepositUtils.Deposit storage)\":{\"details\":\"Calls the light relay and gets the previous block difficulty.\",\"return\":\"The difficulty.\"},\"redemptionTeardown(DepositUtils.Deposit storage)\":{\"details\":\"We keep around the redeemer address so we can pay them out.\"},\"remainingTerm(DepositUtils.Deposit storage)\":{\"details\":\"The return value is not guaranteed since block.timestmap can be lightly manipulated by miners.\",\"return\":\"The remaining term of the deposit in seconds. 0 if already at term\"},\"signerFeeTbtc(DepositUtils.Deposit storage)\":{\"details\":\"Signers are paid based on the TBTC issued.\",\"return\":\"Accumulated fees in 10**18 decimals.\"},\"signerPKH(DepositUtils.Deposit storage)\":{\"details\":\"This is used in bitcoin output scripts for the signers.\",\"return\":\"20-bytes public key hash.\"},\"signerPubkey(DepositUtils.Deposit storage)\":{\"details\":\"We store it as 2 bytes32, (2 slots) then repack it on demand.\",\"return\":\"64 byte public key.\"},\"utxoValue(DepositUtils.Deposit storage)\":{\"details\":\"We store the deposit as bytes8 to make signature checking easier.\",\"return\":\"UTXO value in satoshi.\"},\"validateAndParseFundingSPVProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"details\":\"Takes a pre-parsed transaction and calculates values needed to verify funding.\",\"params\":{\"_bitcoinHeaders\":\"Single bytestring of 80-byte bitcoin headers, lowest height first.\",\"_d\":\"Deposit storage pointer.\",\"_fundingOutputIndex\":\"Index of funding output in _txOutputVector (0-indexed).\",\"_merkleProof\":\"The merkle proof of transaction inclusion in a block.\",\"_txIndexInBlock\":\"Transaction index in the block (0-indexed).\",\"_txInputVector\":\"All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\",\"_txLocktime\":\"Final 4 bytes of the transaction.\",\"_txOutputVector\":\"All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\",\"_txVersion\":\"Transaction version number (4-byte LE).\"},\"return\":\"The 8-byte LE UTXO size in satoshi, the 36byte outpoint.\"},\"wasDigestApprovedForSigning(DepositUtils.Deposit storage,bytes32)\":{\"details\":\"Identifies entry in the recorded approvals by keep ID and digest pair.\",\"params\":{\"_digest\":\"Digest to check approval for.\"},\"return\":\"Timestamp from the moment of recording the digest for signing.                 Returns 0 if the digest was not approved for signing.\"}}},\"userdoc\":{\"methods\":{\"auctionValue(DepositUtils.Deposit storage)\":{\"notice\":\"Calculates the amount of value at auction right now.\"},\"bytes8LEToUint(bytes8)\":{\"notice\":\"Convert a LE bytes8 to a uint256.\"},\"checkProofFromTxId(DepositUtils.Deposit storage,bytes32,bytes,uint256,bytes)\":{\"notice\":\"Syntactically check an SPV proof for a bitcoin transaction with its hash (ID).\"},\"compressPubkey(bytes32,bytes32)\":{\"notice\":\"Compresses a public key.\"},\"currentBlockDifficulty(DepositUtils.Deposit storage)\":{\"notice\":\"Gets the current block difficulty.\"},\"depositOwner(DepositUtils.Deposit storage)\":{\"notice\":\"Looks up the deposit beneficiary by calling the tBTC system.\"},\"determineCompressionPrefix(bytes32)\":{\"notice\":\"Determines the prefix to the compressed public key.\"},\"evaluateProofDifficulty(DepositUtils.Deposit storage,bytes)\":{\"notice\":\"Evaluates the header difficulties in a proof.\"},\"feeRebateTokenHolder(DepositUtils.Deposit storage)\":{\"notice\":\"Looks up the Fee Rebate Token holder.\"},\"fetchBitcoinPrice(DepositUtils.Deposit storage)\":{\"notice\":\"Gets the current price of Bitcoin in Ether.\"},\"fetchBondAmount(DepositUtils.Deposit storage)\":{\"notice\":\"Fetches the Keep's bond amount in wei.\"},\"findAndParseFundingOutput(DepositUtils.Deposit storage,bytes,uint8)\":{\"notice\":\"Find and validate funding output in transaction output vector using the index.\"},\"lotSizeTbtc(DepositUtils.Deposit storage)\":{\"notice\":\"Gets the lot size in erc20 decimal places (max 18)\"},\"previousBlockDifficulty(DepositUtils.Deposit storage)\":{\"notice\":\"Gets the previous block difficulty.\"},\"redemptionTeardown(DepositUtils.Deposit storage)\":{\"notice\":\"Deletes state after termination of redemption process.\"},\"remainingTerm(DepositUtils.Deposit storage)\":{\"notice\":\"Retreive the remaining term of the deposit\"},\"signerFeeTbtc(DepositUtils.Deposit storage)\":{\"notice\":\"Determines the fees due to the signers for work performed.\"},\"signerPKH(DepositUtils.Deposit storage)\":{\"notice\":\"Returns the Bitcoin pubkeyhash (hash160) for the signing group.\"},\"signerPubkey(DepositUtils.Deposit storage)\":{\"notice\":\"Returns the packed public key (64 bytes) for the signing group.\"},\"utxoValue(DepositUtils.Deposit storage)\":{\"notice\":\"Returns the size of the deposit UTXO in satoshi.\"},\"validateAndParseFundingSPVProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)\":{\"notice\":\"Validates the funding tx and parses information from it.\"},\"wasDigestApprovedForSigning(DepositUtils.Deposit storage,bytes32)\":{\"notice\":\"Gets timestamp of digest approval for signing.\"}}}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol\":\"DepositUtils\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol\":{\"keccak256\":\"0x0b407fe4cfa56771c7cb0280e58c23e6c79089bb0f39ec9af83855103cfadce0\",\"urls\":[\"bzz-raw://b06c9ff8c10125cd7dcee7167fd081c95248c97c699a4dfc92bf65d68774f5f1\",\"dweb:/ipfs/QmcdTkj1XtJcPhF9pxr56xV4DW3SxGaaiE5PeGxbYVoHL3\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol\":{\"keccak256\":\"0xc18e532fc384f45567abcf7fbe7bccb885308d63ffeed41d9cf845573a289b98\",\"urls\":[\"bzz-raw://7250e8fce13326313e64d2f24e093bd51c9fdba939b8370f64a1fe820814275b\",\"dweb:/ipfs/QmVfX5w4xN6gxoqbdgPeeTbBvFtxxaNYWSknSY7JDtve2b\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol\":{\"keccak256\":\"0xd8530ab1baddbdfbba6c1b03e547375afe79493b9948d645f94fc0da12ec953b\",\"urls\":[\"bzz-raw://713285a0a4d865a37f3770ce848c20f7277e1540c0a8aa43c2ae0966a7c3df9a\",\"dweb:/ipfs/QmaPiXxvySt9UDmQtVGidh8TQ4XJdxY2X61rEBd8346ELi\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITokenRecipient.sol\":{\"keccak256\":\"0x4ac6830ad44d0b0d70ebabc60150e9c915c7c0bd0129ef868d5d2cd8da0c32bd\",\"urls\":[\"bzz-raw://a5c6465285add41f07a951f90405800a8802e323ea11e9c7bdb5625ce109c7f7\",\"dweb:/ipfs/QmRf7B4WxsS7gbSwUotgQM633BQc2ye7rhYC1RNVFamBfp\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol\":{\"keccak256\":\"0x3d9980b4b18be7e69364b93581d86d08dd2c66fc76b2f9f0af0b4911dc648318\",\"urls\":[\"bzz-raw://751dae1cd68c285a22b513d515074eb6704e11e00ba8196f360d47dc8551dd86\",\"dweb:/ipfs/QmRe5u8bjSd2CMvjgWMzpeea3VdcqEGwAP91zvjxgur8o8\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol\":{\"keccak256\":\"0x74833fb25cf9f24716d563c8fad0fd6172d03577dc85ab4271ca4754285ee915\",\"urls\":[\"bzz-raw://62d37b71546ea52f0c86170b588b021a488785e8570f904f0d2bcfecee93f6a7\",\"dweb:/ipfs/QmePuD631VYpEproKbap8cPXmWeb5mYjU6bwEWnxKCVWbz\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol\":{\"keccak256\":\"0x167b07029df8d350996d7f82d853437d1a2562401eeac98037c2eb4c5f295319\",\"urls\":[\"bzz-raw://7d2601ac8dcd5d59b3e479a61262de2162c96ed7ad1cd161331e2e4500b8346a\",\"dweb:/ipfs/QmWVjBSvHFg9W5zsSxgdpNSYKgfLa28fr3mPjjKQaDBxmk\"]},\"/home/runner/work/tbtc/tbtc/solidity/contracts/system/VendingMachineAuthority.sol\":{\"keccak256\":\"0x7ad8a2cee5e6bbc187d04b147dc0d2bc2ae12bb8c3680870be9013dd5543bfd6\",\"urls\":[\"bzz-raw://733f2370c788437b0034c40a8df07f4714009769ed8134a9c656e2a103996687\",\"dweb:/ipfs/Qma9LAGQDzyUvsbhLx3FUKRCx3FmnoZuMxG4SUdjLr8bRm\"]},\"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\":{\"keccak256\":\"0x8f1edc0a2dfb4d167d190989ebc1c4256664e50ec1f82dfaeb25fa5d4a76a35a\",\"urls\":[\"bzz-raw://e815868907cc082fee1e3964be7de12da2161863d68dd1532a74e3a97bacf533\",\"dweb:/ipfs/Qmd8DqutKSwxh38WWA1ydftNkiAxSD9sqxa7qf1asHKA8c\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0x461cc52e40ba53e646f5c9505b992baa3d5b3c98ae5718561e61b3bc6c726d52\",\"urls\":[\"bzz-raw://90cf2e608b660671642a616ec044e2a39e8ceb7079315b6133ec978c47af9f98\",\"dweb:/ipfs/QmX4hyYS99RYWiQ7BwLXuvQpU5x62YbjJWLgYFwrPkYbzT\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzz-raw://b642c61be1d34e153e4f9cc139291fa26f4ecf31a3acc5b960aad20f4f689eeb\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x9af3b3f36de63e95977f09548617989e391b3c511cf0383ee35cefd5da7d3bfd\",\"urls\":[\"bzz-raw://97ce025c7d18540e4c24578db61cc5e33828be8e9a82b5cb5f46c99212f75ed1\",\"dweb:/ipfs/QmRrdWnd95rgCZzeaNiU4KUcGe1j7oDBj7LatpXhUmjbEE\"]},\"openzeppelin-solidity/contracts/drafts/Counters.sol\":{\"keccak256\":\"0x5eb69360d3441ab2ee799bd7c007cccbffb0896f12b2dfe1456193e2aa180a11\",\"urls\":[\"bzz-raw://072e8b5a1b5acfc2acba9b6fb87d1dc57065aad44572617ad46b014074969eb3\",\"dweb:/ipfs/QmVTDHUriaxBJqiWCWgWC8vYaYYfXSz883LsowzTx1DcpK\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzz-raw://8bdbefb642e7b08535c66bbf074e576cfef2300cdf910c1e0b211f6393833a28\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzz-raw://b40442c5b350b57b88a081a1eacd2bac962d4ecc1f029f5447a18986f08f6f14\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzz-raw://d62d769b2219d5de39013093412623e624fa887f871826ea3bae6052ee893610\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzz-raw://4f5b57664069671648fb81f55b0082faecdf1b2f159eec6b1fa6cef9b7d73bc5\",\"dweb:/ipfs/QmcyytaLs7zFdb4Uu7C5PmQRhQdB3wA3fUdkV6mkYfdDFH\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xc61b3603089b09a730d8ca72e9133a496cc4405da40e9b87c12f073245d774bf\",\"urls\":[\"bzz-raw://de8bb0003d53de236913f0e0102e7a9d015e02098f2495edd000f207fe2be2f4\",\"dweb:/ipfs/QmbtwNwAJEehWWL7yGGyyMoenQvcqtz91pqLgQPpLRoLYC\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzz-raw://d0abb99bb8bfc2bc0a89902b8ed1dc0442ad08cc78cee64c291b3df6a27bcccc\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0xf151df411bbf4eaef1fc8e8480cd10c2cd985f1a36517e63981517610213efc1\",\"urls\":[\"bzz-raw://2a277b3cc3a1a03af5c039bc75cd16bb2d23b529cb2564cc0bea1b1e0eb4dd68\",\"dweb:/ipfs/QmNRxggY8qmjjuLnxggRqE8uBueuCktLwi9YYHagWoaEJ8\"]},\"openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol\":{\"keccak256\":\"0xe5e28b1a405164faa98f8ecd8ed2b00907b89e3d58b2b2bb8ac8b12bc5714489\",\"urls\":[\"bzz-raw://0d5d3f0caa7e7ec91f8a2894e1a6a3513a0c79aa91a498ebf8fdbdd07c12286f\",\"dweb:/ipfs/QmP7r4jQMRxXb5JHy5V9bgMz5FmTezcSDd7ivyzJN88pTR\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0xce48937a8007c580b8e2e35705738c922dd17540de89ebee6df06d2917a3f9fc\",\"urls\":[\"bzz-raw://1d117265103ee3efcd454d3aafb3e79a115f9bca6dec78a1229558eb30d14d05\",\"dweb:/ipfs/QmTm5Z1c7zzPiG3Cfj1eBMB23AeiEFGgvmTFQVaeEWXVCw\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0x2b2b99dc7fe8fcd1f9427d00822b99cbc683dc21f5dd7532bd7e2281fd2c2ca2\",\"urls\":[\"bzz-raw://a8024c00e34efaf328f9592e76823c79f25fa0f6006bdf4a1e7fea204afd4773\",\"dweb:/ipfs/QmZns9jTr7843njq3J2iL2LLoWXK5mdzN1bDGd9GL3ahhD\"]},\"openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xadbfb7028fb0f851dc848a48b9e54e7c89ffd2c2edc12fa4ba9bb383dfaa83d9\",\"urls\":[\"bzz-raw://90dceab42713246639100b87d6650037d68e4a2ab2dd4b5768c3ed35d6b3a4a0\",\"dweb:/ipfs/QmQ42UW5nchMoYP9bU9F1AJga5chG8j92fCPkURpiDKsCu\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzz-raw://75ae8d04454d1511a2ed986cc8585736f05c5c25280683b3d24712a9f414a4bf\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}",
  "bytecode": "0x612e51610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061014c5760003560e01c80638fdd0388116100c2578063d9ab8b8111610086578063d9ab8b8114610521578063db08d91914610544578063e0dfd81a14610561578063e92d81191461059b578063f846f3711461088f578063fa067d92146109cc5761014c565b80638fdd03881461048357806391f88c85146104a0578063a22b0614146104bd578063a8807848146104e7578063ad91ce1f146105045761014c565b8063406af69511610114578063406af6951461033b57806350ef3aa1146103625780635c7b82d71461037f57806368c2bd861461042c5780637949c2d2146104495780637b1993d4146104665761014c565b80630f27e5a0146101515780631129a8a91461021e5780631bf7ad311461025357806327e75cee1461028c5780632fac808a1461031e575b600080fd5b6102016004803603606081101561016757600080fd5b81359190810190604081016020820135600160201b81111561018857600080fd5b82018360208201111561019a57600080fd5b803590602001918460018302840111600160201b831117156101bb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506109e99050565b604080516001600160c01b03199092168252519081900360200190f35b6102416004803603604081101561023457600080fd5b5080359060200135610b55565b60408051918252519081900360200190f35b6102706004803603602081101561026957600080fd5b5035610b6d565b604080516001600160a01b039092168252519081900360200190f35b6102a9600480360360208110156102a257600080fd5b5035610c74565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e35781810151838201526020016102cb565b50505050905090810190601f1680156103105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102416004803603602081101561033457600080fd5b5035610cbd565b6102416004803603602081101561035157600080fd5b50356001600160c01b031916610d3a565b6102416004803603602081101561037857600080fd5b5035610d75565b61042a6004803603604081101561039557600080fd5b81359190810190604081016020820135600160201b8111156103b657600080fd5b8201836020820111156103c857600080fd5b803590602001918460018302840111600160201b831117156103e957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610efb945050505050565b005b6102416004803603602081101561044257600080fd5b503561114c565b6102416004803603602081101561045f57600080fd5b50356111c2565b6102416004803603602081101561047c57600080fd5b5035611253565b6102416004803603602081101561049957600080fd5b5035611267565b610241600480360360208110156104b657600080fd5b50356112ab565b8180156104c957600080fd5b5061042a600480360360208110156104e057600080fd5b503561135d565b610241600480360360208110156104fd57600080fd5b5035611396565b6102706004803603602081101561051a57600080fd5b50356113b6565b6102a96004803603604081101561053757600080fd5b5080359060200135611403565b6102a96004803603602081101561055a57600080fd5b5035611479565b61057e6004803603602081101561057757600080fd5b50356114aa565b604080516001600160601b03199092168252519081900360200190f35b61080660048036036101208110156105b257600080fd5b8135916001600160e01b031960208201351691810190606081016040820135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460018302840111600160201b8311171561061557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561066757600080fd5b82018360208201111561067957600080fd5b803590602001918460018302840111600160201b8311171561069a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b81111561070557600080fd5b82018360208201111561071757600080fd5b803590602001918460018302840111600160201b8311171561073857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561079257600080fd5b8201836020820111156107a457600080fd5b803590602001918460018302840111600160201b831117156107c557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114eb945050505050565b604080516001600160c01b03198416815260208082018381528451938301939093528351919291606084019185019080838360005b8381101561085357818101518382015260200161083b565b50505050905090810190601f1680156108805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61042a600480360360a08110156108a557600080fd5b813591602081013591810190606081016040820135600160201b8111156108cb57600080fd5b8201836020820111156108dd57600080fd5b803590602001918460018302840111600160201b831117156108fe57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561095857600080fd5b82018360208201111561096a57600080fd5b803590602001918460018302840111600160201b8311171561098b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611762945050505050565b610241600480360360208110156109e257600080fd5b50356117cc565b6000806060610a018560ff861663ffffffff61181016565b9050610a0c866114aa565b604080516001600160601b03199092166020808401919091528151808403601401815260349093019091528151910120610a45826119e0565b8051906020012014610a885760405162461bcd60e51b815260040180806020018281038252603e815260200180612da6603e913960400191505060405180910390fd5b8051601f148015610af35750610a9d866114aa565b604080516205800560ea1b6020808301919091526001600160601b03199093166023820152815160178183038101825260379092019092528151919092012090610af190839060089063ffffffff611c1416565b145b610b2e5760405162461bcd60e51b815260040180806020018281038252604e815260200180612cbc604e913960600191505060405180910390fd5b610b49610b44826000600863ffffffff611c7b16565b611d35565b925050505b9392505050565b60008181526019830160205260409020545b92915050565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d6020811015610be957600080fd5b505115610c6c576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b158015610c3d57600080fd5b505afa158015610c51573d6000803e3d6000fd5b505050506040513d6020811015610c6757600080fd5b505190505b90505b919050565b606060018083161415610c9f57506040805180820190915260018152600360f81b6020820152610c6f565b506040805180820190915260018152600160f91b6020820152610c6f565b600a81015460408051631b87adb560e31b815290516000926001600160a01b031691829163dc3d6da891600480820192602092909190829003018186803b158015610d0757600080fd5b505afa158015610d1b573d6000803e3d6000fd5b505050506040513d6020811015610d3157600080fd5b50519392505050565b604080516001600160c01b031983166020820152815180820360080181526028909101909152600090610c6c90610d7090611d51565b611dde565b600080610d8f836007015442611e1b90919063ffffffff16565b9050600047905073__TBTCConstants_________________________6378cb51af6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dda57600080fd5b505af4158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b5051821115610e16579150610c6f9050565b6000610e2185611e78565b90506000610ec573__TBTCConstants_________________________6378cb51af6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6c57600080fd5b505af4158015610e80573d6000803e3d6000fd5b505050506040513d6020811015610e9657600080fd5b5051610eb986610ead60648763ffffffff611e1b16565b9063ffffffff611e9716565b9063ffffffff611ef016565b90506000610ed9838363ffffffff611f5a16565b9050610ef06064610eb9868463ffffffff611e9716565b979650505050505050565b600080610f0784611267565b90506000610f148561114c565b90506000610f29610f2486611fb4565b61200d565b905082811415610f3b57829350610f82565b81811415610f4b57819350610f82565b60405162461bcd60e51b8152600401808060200182810382526025815260200180612d3d6025913960400191505060405180910390fd5b6000610f8d86612024565b9050610f976120e8565b811415610fd55760405162461bcd60e51b8152600401808060200182810382526023815260200180612d836023913960400191505060405180910390fd5b610fdd6120ef565b811415611029576040805162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432b0b232b9399031b430b4b760591b604482015290519081900360640190fd5b6110316120f5565b811415611085576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e206120686561646572000000604482015290519081900360640190fd5b61110573__TBTCConstants_________________________639b3fd99f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110cc57600080fd5b505af41580156110e0573d6000803e3d6000fd5b505050506040513d60208110156110f657600080fd5b5051869063ffffffff611e9716565b8110156111435760405162461bcd60e51b8152600401808060200182810382526033815260200180612d0a6033913960400191505060405180910390fd5b50505050505050565b80546040805163402b783d60e01b815290516000926001600160a01b03169163402b783d916004808301926020929190829003018186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b505192915050565b6000610c6c73__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561120b57600080fd5b505af415801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b50516004840154600160a01b900467ffffffffffffffff1690611e97565b6015810154600090610c6c9060c01b610d3a565b80546040805163dab70cb160e01b815290516000926001600160a01b03169163dab70cb1916004808301926020929190829003018186803b15801561119057600080fd5b60008061133273__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f557600080fd5b505af4158015611309573d6000803e3d6000fd5b505050506040513d602081101561131f57600080fd5b505160168501549063ffffffff611f5a16565b9050804210156113545761134c814263ffffffff611e1b16565b915050610c6f565b50600092915050565b60408051602081019182905260009081905261137d916010840191612be0565b5060006011820181905560138201819055601490910155565b6004810154600090610c6c90600160e81b900461ffff16610eb9846111c2565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b15801561119057600080fd5b606061140e82610c74565b836040516020018083805190602001908083835b602083106114415780518252601f199092019160209182019101611422565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293909101905250949350505050565b600d810154600e90910154604080516020810193909352828101919091528051808303820181526060909201905290565b600060606114c083600d015484600e0154611403565b905060606114cd826120fb565b90506114e081600063ffffffff61224316565b60601b949350505050565b600060606114f8896122a5565b611549576040805162461bcd60e51b815260206004820152601d60248201527f696e76616c696420696e70757420766563746f722070726f7669646564000000604482015290519081900360640190fd5b61155288612357565b6115a3576040805162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206f757470757420766563746f722070726f76696465640000604482015290519081900360640190fd5b60006116968b8b8b8b60405160200180856001600160e01b0319166001600160e01b031916815260040184805190602001908083835b602083106115f85780518252601f1990920191602091820191016115d9565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106116405780518252601f199092019160209182019101611621565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160e01b0319166001600160e01b03191681526004019450505050506040516020818303038152906040526123fc565b90506116a38c8a896109e9565b60048d0154909350600160a01b900467ffffffffffffffff166116c584610d3a565b101561170c576040805162461bcd60e51b815260206004820152601160248201527011195c1bdcda5d081d1bdbc81cdb585b1b607a1b604482015290519081900360640190fd5b6117198c82888888611762565b60408051602081019290925260f89790971b6001600160f81b03191681880152600060418201528651808203602401815260449091019096525099939850929650505050505050565b611780611771610b4483612525565b8590858563ffffffff61253a16565b6117bb5760405162461bcd60e51b8152600401808060200182810382526039815260200180612de46039913960400191505060405180910390fd5b6117c58582610efb565b5050505050565b8054604080516329b05a4760e21b815290516000926001600160a01b03169163a6c1691c916004808301926020929190829003018186803b15801561119057600080fd5b606060008061181e856125ea565b90925090506000198214156118645760405162461bcd60e51b8152600401808060200182810382526022815260200180612c9a6022913960400191505060405180910390fd5b8084106118ac576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b87811015611946576118d682838b51038b611c7b9092919063ffffffff16565b93506118e184612676565b925060001983141561193a576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b908201906001016118b6565b5061195f81828a51038a611c7b9092919063ffffffff16565b925061196a83612676565b91506000198214156119c3576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b6119d488828463ffffffff611c7b16565b98975050505050505050565b60606000826008815181106119f157fe5b0160200151835160f89190911c91506009820160ff1614611a22575050604080516020810190915260008152610c6f565b82600981518110611a2f57fe5b016020015160f81c611ad25760028160ff161015611a5d575050604080516020810190915260008152610c6f565b600083600a81518110611a6c57fe5b016020015160f81c9050600119820160ff1681141580611a99575080602014158015611a99575080601414155b15611ab7576040518060200160405280600081525092505050610c6f565b611ac984600b8363ffffffff611c7b16565b92505050610c6f565b6000611ae7846008600363ffffffff611c1416565b60408051621976a960e81b81529051908190036003019020909150811415611b925783600b81518110611b1657fe5b60209101015160f81c6014141580611b615750604051808061222b60f21b81525060020190506040518091039020611b5e6002865103600287611c149092919063ffffffff16565b14155b15611b7f576040518060200160405280600081525092505050610c6f565b611ac984600c601463ffffffff611c7b16565b604080516205ea4560ea1b81529051908190036003019020811415611bfd5783600185510381518110611bc157fe5b60209101015160f81c608714611bea576040518060200160405280600081525092505050610c6f565b611ac984600b601463ffffffff611c7b16565b505050604080516020810190915260008152919050565b60008282018381118015611c29575080855110155b611c70576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b606081611c975750604080516020810190915260008152610b4e565b8282018381118015611caa575080855110155b611cf1576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b80821015611d2a57815183830152602082019150611d11565b505050509392505050565b6000815160001415611d4957506000610c6f565b506020015190565b60608082516040519080825280601f01601f191660200182016040528015611d80576020820181803883390190505b50905060005b8351811015611dd757838181518110611d9b57fe5b602001015160f81c60f81b826001838751030381518110611db857fe5b60200101906001600160f81b031916908160001a905350600101611d86565b5092915050565b600080805b8351811015611dd7578060010184510360080260020a848281518110611e0557fe5b016020015160f81c029190910190600101611de3565b600082821115611e72576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6005810154600090610c6c906127109061ffff1663ffffffff611ef016565b600082611ea657506000610b67565b82820282848281611eb357fe5b0414610b4e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612d626021913960400191505060405180910390fd5b6000808211611f46576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481611f5157fe5b04949350505050565b600082820183811015610b4e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006060611fcb836048600363ffffffff611c7b16565b9050600083604b81518110611fdc57fe5b016020015160f81c90506000611ff4610d7084611d51565b6002199290920160ff166101000a909102949350505050565b6000610c6c61ffff60d01b8363ffffffff6126dc16565b6000605082518161203157fe5b06156120405750600019610c6f565b50600080805b83518110156120e15760606120638583605063ffffffff611c7b16565b905081156120865761207581846126ef565b612086576001199350505050610c6f565b600061209182611fb4565b905061209c8261271b565b9350806120a885612740565b11156120bc57600219945050505050610c6f565b6120d56120c88261200d565b869063ffffffff61287a16565b94505050605001612046565b5050919050565b6000195b90565b60011990565b60021990565b606060036002836040518082805190602001908083835b602083106121315780518252601f199092019160209182019101612112565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612170573d6000803e3d6000fd5b5050506040513d602081101561218557600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106121d15780518252601f1990920191602091820191016121b2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612210573d6000803e3d6000fd5b505060408051805160601b6001600160601b03191660208201528151601481830301815260349091019091529392505050565b6000601482018281118015612259575080845110155b6122945760405162461bcd60e51b8152600401808060200182810382526021815260200180612c796021913960400191505060405180910390fd5b50500160200151600160601b900490565b60008060006122b3846125ea565b90925090508015806122c6575060001982145b156122d657600092505050610c6f565b6001820160005b8281101561234a57855182106122fa576000945050505050610c6f565b6060612314838489510389611c7b9092919063ffffffff16565b90506000612321826128d2565b905060001981141561233c5760009650505050505050610c6f565b9290920191506001016122dd565b5084511492505050919050565b6000806000612365846125ea565b9092509050801580612378575060001982145b1561238857600092505050610c6f565b6001820160005b8281101561234a57855182106123ac576000945050505050610c6f565b60606123c6838489510389611c7b9092919063ffffffff16565b905060006123d382612676565b90506000198114156123ee5760009650505050505050610c6f565b92909201915060010161238f565b6000600280836040518082805190602001908083835b602083106124315780518252601f199092019160209182019101612412565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612470573d6000803e3d6000fd5b5050506040513d602081101561248557600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106124d15780518252601f1990920191602091820191016124b2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612510573d6000803e3d6000fd5b5050506040513d60208110156111ba57600080fd5b6060610c6c826024602063ffffffff611c7b16565b60008385148015612549575081155b801561255457508251155b15612561575060016125e2565b60608584866040516020018084815260200183805190602001908083835b6020831061259e5780518252601f19909201916020918201910161257f565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529390910190525092506125de915082905084612905565b9150505b949350505050565b60008060006125f884612a44565b905060ff81166126255760008460008151811061261157fe5b016020015190935060f81c91506126719050565b8060010160ff16845110156126435750600019915060009050612671565b6000612665610d7061266087600160ff871663ffffffff611c7b16565b611d51565b60ff9092169350909150505b915091565b600060098251101561268b5750600019610c6f565b60606126a660088085510385611c7b9092919063ffffffff16565b90506000806126b4836125ea565b90925090506000198214156126d0576000199350505050610c6f565b01600901915050919050565b60008183816126e757fe5b049392505050565b6000806126fe610b4485612ac0565b9050828114612711576000915050610b67565b5060019392505050565b600060405160208184516020860160025afa5060208160208360025afa505192915050565b600881811c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff167fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff009290911b9190911617601081811c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff167fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00009290911b9190911617602081811c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff167fffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000009290911b9190911617604081811c77ffffffffffffffff0000000000000000ffffffffffffffff1677ffffffffffffffff0000000000000000ffffffffffffffff199290911b9190911617608081811c91901b1790565b81810182811015610b67576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b60008060006128e084612ad5565b90925090506000198214156128fb5760001992505050610c6f565b0160290192915050565b6000602083518161291257fe5b061561292057506000610b67565b82516020141561293257506001610b67565b82516040141561294457506000610b67565b8251829060009061296690610b44908790601f1901602063ffffffff611c7b16565b9050600061297f610b448783602063ffffffff611c7b16565b905060015b865160019061299a90602063ffffffff6126dc16565b03811015612a3a5760028406600114156129f2576129eb6129c68860208085029063ffffffff611c7b16565b8360405160200180828152602001915050604051602081830303815290604052612b25565b9150612a2e565b604080516020808201859052825180830382018152918301909252612a2b91612a26908a908581029063ffffffff611c7b16565b612b25565b91505b600193841c9301612984565b5014949350505050565b600081600081518110612a5357fe5b60209101015160f81c60ff1415612a6c57506008610c6f565b81600081518110612a7957fe5b60209101015160f81c60fe1415612a9257506004610c6f565b81600081518110612a9f57fe5b60209101015160f81c60fd1415612ab857506002610c6f565b506000919050565b6060610c6c826004602063ffffffff611c7b16565b600080602583511015612aef575060001990506000612671565b6060612b0a60248086510386611c7b9092919063ffffffff16565b9050600080612b18836125ea565b9095509350505050915091565b6000610b4e83836040516020018083805190602001908083835b60208310612b5e5780518252601f199092019160209182019101612b3f565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612ba65780518252601f199092019160209182019101612b87565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526123fc565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c2157805160ff1916838001178555612c4e565b82800160010185558215612c4e579182015b82811115612c4e578251825591602001919060010190612c33565b50612c5a929150612c5e565b5090565b6120ec91905b80821115612c5a5760008155600101612c6456fe4164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e52656164206f76657272756e20647572696e6720566172496e742070617273696e6746756e64696e67207472616e73616374696f6e206f7574707574207479706520756e737570706f727465643a206f6e6c7920703277706b68206f7574707574732061726520737570706f72746564496e73756666696369656e7420616363756d756c6174656420646966666963756c747920696e2068656164657220636861696e6e6f742061742063757272656e74206f722070726576696f757320646966666963756c7479536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e76616c6964206c656e677468206f6620746865206865616465727320636861696e436f756c64206e6f74206964656e74696679206f75747075742066756e64696e6720746865207265717569726564207075626c6963206b657920686173685478206d65726b6c652070726f6f66206973206e6f742076616c696420666f722070726f76696465642068656164657220616e642074784964a265627a7a7231582001409882815e4718e9a76f7c12317187fb06124f45a5312496371d86691381cd64736f6c63430005110032",
  "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061014c5760003560e01c80638fdd0388116100c2578063d9ab8b8111610086578063d9ab8b8114610521578063db08d91914610544578063e0dfd81a14610561578063e92d81191461059b578063f846f3711461088f578063fa067d92146109cc5761014c565b80638fdd03881461048357806391f88c85146104a0578063a22b0614146104bd578063a8807848146104e7578063ad91ce1f146105045761014c565b8063406af69511610114578063406af6951461033b57806350ef3aa1146103625780635c7b82d71461037f57806368c2bd861461042c5780637949c2d2146104495780637b1993d4146104665761014c565b80630f27e5a0146101515780631129a8a91461021e5780631bf7ad311461025357806327e75cee1461028c5780632fac808a1461031e575b600080fd5b6102016004803603606081101561016757600080fd5b81359190810190604081016020820135600160201b81111561018857600080fd5b82018360208201111561019a57600080fd5b803590602001918460018302840111600160201b831117156101bb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff1691506109e99050565b604080516001600160c01b03199092168252519081900360200190f35b6102416004803603604081101561023457600080fd5b5080359060200135610b55565b60408051918252519081900360200190f35b6102706004803603602081101561026957600080fd5b5035610b6d565b604080516001600160a01b039092168252519081900360200190f35b6102a9600480360360208110156102a257600080fd5b5035610c74565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e35781810151838201526020016102cb565b50505050905090810190601f1680156103105780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102416004803603602081101561033457600080fd5b5035610cbd565b6102416004803603602081101561035157600080fd5b50356001600160c01b031916610d3a565b6102416004803603602081101561037857600080fd5b5035610d75565b61042a6004803603604081101561039557600080fd5b81359190810190604081016020820135600160201b8111156103b657600080fd5b8201836020820111156103c857600080fd5b803590602001918460018302840111600160201b831117156103e957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610efb945050505050565b005b6102416004803603602081101561044257600080fd5b503561114c565b6102416004803603602081101561045f57600080fd5b50356111c2565b6102416004803603602081101561047c57600080fd5b5035611253565b6102416004803603602081101561049957600080fd5b5035611267565b610241600480360360208110156104b657600080fd5b50356112ab565b8180156104c957600080fd5b5061042a600480360360208110156104e057600080fd5b503561135d565b610241600480360360208110156104fd57600080fd5b5035611396565b6102706004803603602081101561051a57600080fd5b50356113b6565b6102a96004803603604081101561053757600080fd5b5080359060200135611403565b6102a96004803603602081101561055a57600080fd5b5035611479565b61057e6004803603602081101561057757600080fd5b50356114aa565b604080516001600160601b03199092168252519081900360200190f35b61080660048036036101208110156105b257600080fd5b8135916001600160e01b031960208201351691810190606081016040820135600160201b8111156105e257600080fd5b8201836020820111156105f457600080fd5b803590602001918460018302840111600160201b8311171561061557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561066757600080fd5b82018360208201111561067957600080fd5b803590602001918460018302840111600160201b8311171561069a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160e01b03198535169560ff60208701351695919450925060608101915060400135600160201b81111561070557600080fd5b82018360208201111561071757600080fd5b803590602001918460018302840111600160201b8311171561073857600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561079257600080fd5b8201836020820111156107a457600080fd5b803590602001918460018302840111600160201b831117156107c557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114eb945050505050565b604080516001600160c01b03198416815260208082018381528451938301939093528351919291606084019185019080838360005b8381101561085357818101518382015260200161083b565b50505050905090810190601f1680156108805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61042a600480360360a08110156108a557600080fd5b813591602081013591810190606081016040820135600160201b8111156108cb57600080fd5b8201836020820111156108dd57600080fd5b803590602001918460018302840111600160201b831117156108fe57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561095857600080fd5b82018360208201111561096a57600080fd5b803590602001918460018302840111600160201b8311171561098b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611762945050505050565b610241600480360360208110156109e257600080fd5b50356117cc565b6000806060610a018560ff861663ffffffff61181016565b9050610a0c866114aa565b604080516001600160601b03199092166020808401919091528151808403601401815260349093019091528151910120610a45826119e0565b8051906020012014610a885760405162461bcd60e51b815260040180806020018281038252603e815260200180612da6603e913960400191505060405180910390fd5b8051601f148015610af35750610a9d866114aa565b604080516205800560ea1b6020808301919091526001600160601b03199093166023820152815160178183038101825260379092019092528151919092012090610af190839060089063ffffffff611c1416565b145b610b2e5760405162461bcd60e51b815260040180806020018281038252604e815260200180612cbc604e913960600191505060405180910390fd5b610b49610b44826000600863ffffffff611c7b16565b611d35565b925050505b9392505050565b60008181526019830160205260409020545b92915050565b600381015460408051634f558e7960e01b8152306004820152905160009283926001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d6020811015610be957600080fd5b505115610c6c576003830154604080516331a9108f60e11b815230600482015290516001600160a01b0390921691636352211e91602480820192602092909190829003018186803b158015610c3d57600080fd5b505afa158015610c51573d6000803e3d6000fd5b505050506040513d6020811015610c6757600080fd5b505190505b90505b919050565b606060018083161415610c9f57506040805180820190915260018152600360f81b6020820152610c6f565b506040805180820190915260018152600160f91b6020820152610c6f565b600a81015460408051631b87adb560e31b815290516000926001600160a01b031691829163dc3d6da891600480820192602092909190829003018186803b158015610d0757600080fd5b505afa158015610d1b573d6000803e3d6000fd5b505050506040513d6020811015610d3157600080fd5b50519392505050565b604080516001600160c01b031983166020820152815180820360080181526028909101909152600090610c6c90610d7090611d51565b611dde565b600080610d8f836007015442611e1b90919063ffffffff16565b9050600047905073__TBTCConstants_________________________6378cb51af6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dda57600080fd5b505af4158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b5051821115610e16579150610c6f9050565b6000610e2185611e78565b90506000610ec573__TBTCConstants_________________________6378cb51af6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6c57600080fd5b505af4158015610e80573d6000803e3d6000fd5b505050506040513d6020811015610e9657600080fd5b5051610eb986610ead60648763ffffffff611e1b16565b9063ffffffff611e9716565b9063ffffffff611ef016565b90506000610ed9838363ffffffff611f5a16565b9050610ef06064610eb9868463ffffffff611e9716565b979650505050505050565b600080610f0784611267565b90506000610f148561114c565b90506000610f29610f2486611fb4565b61200d565b905082811415610f3b57829350610f82565b81811415610f4b57819350610f82565b60405162461bcd60e51b8152600401808060200182810382526025815260200180612d3d6025913960400191505060405180910390fd5b6000610f8d86612024565b9050610f976120e8565b811415610fd55760405162461bcd60e51b8152600401808060200182810382526023815260200180612d836023913960400191505060405180910390fd5b610fdd6120ef565b811415611029576040805162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432b0b232b9399031b430b4b760591b604482015290519081900360640190fd5b6110316120f5565b811415611085576040805162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e206120686561646572000000604482015290519081900360640190fd5b61110573__TBTCConstants_________________________639b3fd99f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110cc57600080fd5b505af41580156110e0573d6000803e3d6000fd5b505050506040513d60208110156110f657600080fd5b5051869063ffffffff611e9716565b8110156111435760405162461bcd60e51b8152600401808060200182810382526033815260200180612d0a6033913960400191505060405180910390fd5b50505050505050565b80546040805163402b783d60e01b815290516000926001600160a01b03169163402b783d916004808301926020929190829003018186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b505192915050565b6000610c6c73__TBTCConstants_________________________63ae9eb1276040518163ffffffff1660e01b815260040160206040518083038186803b15801561120b57600080fd5b505af415801561121f573d6000803e3d6000fd5b505050506040513d602081101561123557600080fd5b50516004840154600160a01b900467ffffffffffffffff1690611e97565b6015810154600090610c6c9060c01b610d3a565b80546040805163dab70cb160e01b815290516000926001600160a01b03169163dab70cb1916004808301926020929190829003018186803b15801561119057600080fd5b60008061133273__TBTCConstants_________________________63d565d1f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112f557600080fd5b505af4158015611309573d6000803e3d6000fd5b505050506040513d602081101561131f57600080fd5b505160168501549063ffffffff611f5a16565b9050804210156113545761134c814263ffffffff611e1b16565b915050610c6f565b50600092915050565b60408051602081019182905260009081905261137d916010840191612be0565b5060006011820181905560138201819055601490910155565b6004810154600090610c6c90600160e81b900461ffff16610eb9846111c2565b6002810154604080516331a9108f60e11b815230600482015290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b15801561119057600080fd5b606061140e82610c74565b836040516020018083805190602001908083835b602083106114415780518252601f199092019160209182019101611422565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293909101905250949350505050565b600d810154600e90910154604080516020810193909352828101919091528051808303820181526060909201905290565b600060606114c083600d015484600e0154611403565b905060606114cd826120fb565b90506114e081600063ffffffff61224316565b60601b949350505050565b600060606114f8896122a5565b611549576040805162461bcd60e51b815260206004820152601d60248201527f696e76616c696420696e70757420766563746f722070726f7669646564000000604482015290519081900360640190fd5b61155288612357565b6115a3576040805162461bcd60e51b815260206004820152601e60248201527f696e76616c6964206f757470757420766563746f722070726f76696465640000604482015290519081900360640190fd5b60006116968b8b8b8b60405160200180856001600160e01b0319166001600160e01b031916815260040184805190602001908083835b602083106115f85780518252601f1990920191602091820191016115d9565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106116405780518252601f199092019160209182019101611621565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160e01b0319166001600160e01b03191681526004019450505050506040516020818303038152906040526123fc565b90506116a38c8a896109e9565b60048d0154909350600160a01b900467ffffffffffffffff166116c584610d3a565b101561170c576040805162461bcd60e51b815260206004820152601160248201527011195c1bdcda5d081d1bdbc81cdb585b1b607a1b604482015290519081900360640190fd5b6117198c82888888611762565b60408051602081019290925260f89790971b6001600160f81b03191681880152600060418201528651808203602401815260449091019096525099939850929650505050505050565b611780611771610b4483612525565b8590858563ffffffff61253a16565b6117bb5760405162461bcd60e51b8152600401808060200182810382526039815260200180612de46039913960400191505060405180910390fd5b6117c58582610efb565b5050505050565b8054604080516329b05a4760e21b815290516000926001600160a01b03169163a6c1691c916004808301926020929190829003018186803b15801561119057600080fd5b606060008061181e856125ea565b90925090506000198214156118645760405162461bcd60e51b8152600401808060200182810382526022815260200180612c9a6022913960400191505060405180910390fd5b8084106118ac576040805162461bcd60e51b81526020600482015260116024820152702b37baba103932b0b21037bb32b9393ab760791b604482015290519081900360640190fd5b6060600060018401815b87811015611946576118d682838b51038b611c7b9092919063ffffffff16565b93506118e184612676565b925060001983141561193a576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b908201906001016118b6565b5061195f81828a51038a611c7b9092919063ffffffff16565b925061196a83612676565b91506000198214156119c3576040805162461bcd60e51b815260206004820152601a60248201527f42616420566172496e7420696e207363726970745075626b6579000000000000604482015290519081900360640190fd5b6119d488828463ffffffff611c7b16565b98975050505050505050565b60606000826008815181106119f157fe5b0160200151835160f89190911c91506009820160ff1614611a22575050604080516020810190915260008152610c6f565b82600981518110611a2f57fe5b016020015160f81c611ad25760028160ff161015611a5d575050604080516020810190915260008152610c6f565b600083600a81518110611a6c57fe5b016020015160f81c9050600119820160ff1681141580611a99575080602014158015611a99575080601414155b15611ab7576040518060200160405280600081525092505050610c6f565b611ac984600b8363ffffffff611c7b16565b92505050610c6f565b6000611ae7846008600363ffffffff611c1416565b60408051621976a960e81b81529051908190036003019020909150811415611b925783600b81518110611b1657fe5b60209101015160f81c6014141580611b615750604051808061222b60f21b81525060020190506040518091039020611b5e6002865103600287611c149092919063ffffffff16565b14155b15611b7f576040518060200160405280600081525092505050610c6f565b611ac984600c601463ffffffff611c7b16565b604080516205ea4560ea1b81529051908190036003019020811415611bfd5783600185510381518110611bc157fe5b60209101015160f81c608714611bea576040518060200160405280600081525092505050610c6f565b611ac984600b601463ffffffff611c7b16565b505050604080516020810190915260008152919050565b60008282018381118015611c29575080855110155b611c70576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b505091016020012090565b606081611c975750604080516020810190915260008152610b4e565b8282018381118015611caa575080855110155b611cf1576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051915082604083010160405282825283850182038460208701018481015b80821015611d2a57815183830152602082019150611d11565b505050509392505050565b6000815160001415611d4957506000610c6f565b506020015190565b60608082516040519080825280601f01601f191660200182016040528015611d80576020820181803883390190505b50905060005b8351811015611dd757838181518110611d9b57fe5b602001015160f81c60f81b826001838751030381518110611db857fe5b60200101906001600160f81b031916908160001a905350600101611d86565b5092915050565b600080805b8351811015611dd7578060010184510360080260020a848281518110611e0557fe5b016020015160f81c029190910190600101611de3565b600082821115611e72576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6005810154600090610c6c906127109061ffff1663ffffffff611ef016565b600082611ea657506000610b67565b82820282848281611eb357fe5b0414610b4e5760405162461bcd60e51b8152600401808060200182810382526021815260200180612d626021913960400191505060405180910390fd5b6000808211611f46576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b6000828481611f5157fe5b04949350505050565b600082820183811015610b4e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006060611fcb836048600363ffffffff611c7b16565b9050600083604b81518110611fdc57fe5b016020015160f81c90506000611ff4610d7084611d51565b6002199290920160ff166101000a909102949350505050565b6000610c6c61ffff60d01b8363ffffffff6126dc16565b6000605082518161203157fe5b06156120405750600019610c6f565b50600080805b83518110156120e15760606120638583605063ffffffff611c7b16565b905081156120865761207581846126ef565b612086576001199350505050610c6f565b600061209182611fb4565b905061209c8261271b565b9350806120a885612740565b11156120bc57600219945050505050610c6f565b6120d56120c88261200d565b869063ffffffff61287a16565b94505050605001612046565b5050919050565b6000195b90565b60011990565b60021990565b606060036002836040518082805190602001908083835b602083106121315780518252601f199092019160209182019101612112565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612170573d6000803e3d6000fd5b5050506040513d602081101561218557600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106121d15780518252601f1990920191602091820191016121b2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612210573d6000803e3d6000fd5b505060408051805160601b6001600160601b03191660208201528151601481830301815260349091019091529392505050565b6000601482018281118015612259575080845110155b6122945760405162461bcd60e51b8152600401808060200182810382526021815260200180612c796021913960400191505060405180910390fd5b50500160200151600160601b900490565b60008060006122b3846125ea565b90925090508015806122c6575060001982145b156122d657600092505050610c6f565b6001820160005b8281101561234a57855182106122fa576000945050505050610c6f565b6060612314838489510389611c7b9092919063ffffffff16565b90506000612321826128d2565b905060001981141561233c5760009650505050505050610c6f565b9290920191506001016122dd565b5084511492505050919050565b6000806000612365846125ea565b9092509050801580612378575060001982145b1561238857600092505050610c6f565b6001820160005b8281101561234a57855182106123ac576000945050505050610c6f565b60606123c6838489510389611c7b9092919063ffffffff16565b905060006123d382612676565b90506000198114156123ee5760009650505050505050610c6f565b92909201915060010161238f565b6000600280836040518082805190602001908083835b602083106124315780518252601f199092019160209182019101612412565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612470573d6000803e3d6000fd5b5050506040513d602081101561248557600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b602083106124d15780518252601f1990920191602091820191016124b2565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015612510573d6000803e3d6000fd5b5050506040513d60208110156111ba57600080fd5b6060610c6c826024602063ffffffff611c7b16565b60008385148015612549575081155b801561255457508251155b15612561575060016125e2565b60608584866040516020018084815260200183805190602001908083835b6020831061259e5780518252601f19909201916020918201910161257f565b51815160209384036101000a60001901801990921691161790529201938452506040805180850381529390910190525092506125de915082905084612905565b9150505b949350505050565b60008060006125f884612a44565b905060ff81166126255760008460008151811061261157fe5b016020015190935060f81c91506126719050565b8060010160ff16845110156126435750600019915060009050612671565b6000612665610d7061266087600160ff871663ffffffff611c7b16565b611d51565b60ff9092169350909150505b915091565b600060098251101561268b5750600019610c6f565b60606126a660088085510385611c7b9092919063ffffffff16565b90506000806126b4836125ea565b90925090506000198214156126d0576000199350505050610c6f565b01600901915050919050565b60008183816126e757fe5b049392505050565b6000806126fe610b4485612ac0565b9050828114612711576000915050610b67565b5060019392505050565b600060405160208184516020860160025afa5060208160208360025afa505192915050565b600881811c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff167fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff009290911b9190911617601081811c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff167fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00009290911b9190911617602081811c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff167fffffffff00000000ffffffff00000000ffffffff00000000ffffffff000000009290911b9190911617604081811c77ffffffffffffffff0000000000000000ffffffffffffffff1677ffffffffffffffff0000000000000000ffffffffffffffff199290911b9190911617608081811c91901b1790565b81810182811015610b67576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b60008060006128e084612ad5565b90925090506000198214156128fb5760001992505050610c6f565b0160290192915050565b6000602083518161291257fe5b061561292057506000610b67565b82516020141561293257506001610b67565b82516040141561294457506000610b67565b8251829060009061296690610b44908790601f1901602063ffffffff611c7b16565b9050600061297f610b448783602063ffffffff611c7b16565b905060015b865160019061299a90602063ffffffff6126dc16565b03811015612a3a5760028406600114156129f2576129eb6129c68860208085029063ffffffff611c7b16565b8360405160200180828152602001915050604051602081830303815290604052612b25565b9150612a2e565b604080516020808201859052825180830382018152918301909252612a2b91612a26908a908581029063ffffffff611c7b16565b612b25565b91505b600193841c9301612984565b5014949350505050565b600081600081518110612a5357fe5b60209101015160f81c60ff1415612a6c57506008610c6f565b81600081518110612a7957fe5b60209101015160f81c60fe1415612a9257506004610c6f565b81600081518110612a9f57fe5b60209101015160f81c60fd1415612ab857506002610c6f565b506000919050565b6060610c6c826004602063ffffffff611c7b16565b600080602583511015612aef575060001990506000612671565b6060612b0a60248086510386611c7b9092919063ffffffff16565b9050600080612b18836125ea565b9095509350505050915091565b6000610b4e83836040516020018083805190602001908083835b60208310612b5e5780518252601f199092019160209182019101612b3f565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612ba65780518252601f199092019160209182019101612b87565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526123fc565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612c2157805160ff1916838001178555612c4e565b82800160010185558215612c4e579182015b82811115612c4e578251825591602001919060010190612c33565b50612c5a929150612c5e565b5090565b6120ec91905b80821115612c5a5760008155600101612c6456fe4164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e52656164206f76657272756e20647572696e6720566172496e742070617273696e6746756e64696e67207472616e73616374696f6e206f7574707574207479706520756e737570706f727465643a206f6e6c7920703277706b68206f7574707574732061726520737570706f72746564496e73756666696369656e7420616363756d756c6174656420646966666963756c747920696e2068656164657220636861696e6e6f742061742063757272656e74206f722070726576696f757320646966666963756c7479536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e76616c6964206c656e677468206f6620746865206865616465727320636861696e436f756c64206e6f74206964656e74696679206f75747075742066756e64696e6720746865207265717569726564207075626c6963206b657920686173685478206d65726b6c652070726f6f66206973206e6f742076616c696420666f722070726f76696465642068656164657220616e642074784964a265627a7a7231582001409882815e4718e9a76f7c12317187fb06124f45a5312496371d86691381cd64736f6c63430005110032",
  "sourceMap": "802:28542:7:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "802:28542:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8040:961;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8040:961:7;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8040:961:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8040:961:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8040:961:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8040:961:7;;-1:-1:-1;;;8040:961:7;;;;;-1:-1:-1;8040:961:7;;-1:-1:-1;8040:961:7:i;:::-;;;;-1:-1:-1;;;;;;8040:961:7;;;;;;;;;;;;;;17972:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17972:185:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18359:410;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18359:410:7;;:::i;:::-;;;;-1:-1:-1;;;;;18359:410:7;;;;;;;;;;;;;;14397:268;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14397:268:7;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14397:268:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16979:219;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16979:219:7;;:::i;17438:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17438:143:7;-1:-1:-1;;;;;;17438:143:7;;:::i;12720:727::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12720:727:7;;:::i;4876:1282::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4876:1282:7;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4876:1282:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4876:1282:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4876:1282:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;4876:1282:7;;-1:-1:-1;4876:1282:7;;-1:-1:-1;;;;;4876:1282:7:i;:::-;;4382:179;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4382:179:7;;:::i;13589:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13589:155:7;;:::i;16324:128::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16324:128:7;;:::i;4013:177::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4013:177:7;;:::i;12092:320::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12092:320:7;;:::i;19405:220::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19405:220:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19405:220:7;;:::i;13961:137::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13961:137:7;;:::i;19001:243::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19001:243:7;;:::i;14997:211::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14997:211:7;;;;;;;:::i;15417:195::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15417:195:7;;:::i;15821:302::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15821:302:7;;:::i;:::-;;;;-1:-1:-1;;;;;;15821:302:7;;;;;;;;;;;;;;10155:1678;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10155:1678:7;;;-1:-1:-1;;;;;;10155:1678:7;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10155:1678:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10155:1678:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10155:1678:7;;;;;;;;-1:-1:-1;10155:1678:7;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;10155:1678:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10155:1678:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10155:1678:7;;-1:-1:-1;;;;;;10155:1678:7;;;;;;;;;;;;;-1:-1:-1;10155:1678:7;-1:-1:-1;10155:1678:7;;;;-1:-1:-1;10155:1678:7;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10155:1678:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10155:1678:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10155:1678:7;;;;;;;;;-1:-1:-1;10155:1678:7;;;;-1:-1:-1;10155:1678:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;10155:1678:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10155:1678:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10155:1678:7;;-1:-1:-1;10155:1678:7;;-1:-1:-1;;;;;10155:1678:7:i;:::-;;;;-1:-1:-1;;;;;;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10155:1678:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6830:533;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6830:533:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6830:533:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6830:533:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6830:533:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6830:533:7;;;;;;;;;-1:-1:-1;6830:533:7;;;;-1:-1:-1;6830:533:7;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;6830:533:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6830:533:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6830:533:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6830:533:7;;-1:-1:-1;6830:533:7;;-1:-1:-1;;;;;6830:533:7:i;16643:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16643:164:7;;:::i;8040:961::-;8216:6;;8262:20;8352:57;:15;:57;;;;:36;:57;:::i;:::-;8342:67;;8520:13;8530:2;8520:9;:13::i;:::-;8503:31;;;-1:-1:-1;;;;;;8503:31:7;;;;;;;;;;;;;26:21:-1;;;8503:31:7;22:32:-1;6:49;;8503:31:7;;;;;;;8493:42;;;;;8451:21;:7;:19;:21::i;:::-;8441:32;;;;;;:94;8420:203;;;;-1:-1:-1;;;8420:203:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8654:7;:14;8672:2;8654:20;:144;;;;;8783:13;8793:2;8783:9;:13::i;:::-;8753:44;;;-1:-1:-1;;;8753:44:7;;;;;;;;-1:-1:-1;;;;;;8753:44:7;;;;;;;;;22:32:-1;26:21;;;22:32;;6:49;;8753:44:7;;;;;;;8743:55;;;;;;;;8694:29;;:7;;8717:1;;8694:29;:22;:29;:::i;:::-;:104;8654:144;8633:269;;;;-1:-1:-1;;;8633:269:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8934:31;:19;:7;8948:1;8951;8934:19;:13;:19;:::i;:::-;:29;:31::i;:::-;8913:53;-1:-1:-1;;;8040:961:7;;;;;;:::o;17972:185::-;18093:7;18123:27;;;:18;;;:27;;;;;;17972:185;;;;;:::o;18359:410::-;18531:17;;;;:48;;;-1:-1:-1;;;18531:48:7;;18572:4;18531:48;;;;;;18454:15;;;;-1:-1:-1;;;;;18531:17:7;;;;:24;;:48;;;;;;;;;;;;;;;:17;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;18531:48:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18531:48:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18531:48:7;18527:190;;;18642:17;;;;:49;;;-1:-1:-1;;;18642:49:7;;18684:4;18642:49;;;;;;-1:-1:-1;;;;;18642:17:7;;;;:25;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;18642:49:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18642:49:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18642:49:7;;-1:-1:-1;18527:190:7;18749:11;-1:-1:-1;18359:410:7;;;;:::o;14397:268::-;14496:12;14548:1;14528:21;;;:26;14524:135;;;-1:-1:-1;14570:14:7;;;;;;;;;;;;-1:-1:-1;;;14570:14:7;;;;;;14524:135;-1:-1:-1;14624:14:7;;;;;;;;;;;;-1:-1:-1;;;14624:14:7;;;;;;16979:219;17136:14;;;;17168:23;;;-1:-1:-1;;;17168:23:7;;;;17071:7;;-1:-1:-1;;;;;17136:14:7;;;;17168:21;;:23;;;;;;;;;;;;;;;17136:14;17168:23;;;5:2:-1;;;;30:1;27;20:12;5:2;17168:23:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17168:23:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17168:23:7;;16979:219;-1:-1:-1;;;16979:219:7:o;17438:143::-;17520:20;;;-1:-1:-1;;;;;;17520:20:7;;;;;;;;26:21:-1;;;17520:20:7;22:32:-1;6:49;;17520:20:7;;;;;;;17494:7;;17520:54;;:40;;:38;:40::i;:::-;:52;:54::i;12720:727::-;12785:7;12804:16;12823:44;12843:2;:23;;;12823:15;:19;;:44;;;;:::i;:::-;12804:63;;12877:18;12898:21;12877:42;;12944:13;:32;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12944:34:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12944:34:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12944:34:7;12933:45;;12929:93;;;13001:10;-1:-1:-1;12994:17:7;;-1:-1:-1;12994:17:7;12929:93;13093:23;13119:28;13144:2;13119:24;:28::i;:::-;13093:54;;13157:26;13198:117;13267:13;:32;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13267:34:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13267:34:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13267:34:7;13198:47;13236:8;13198:33;13206:3;13215:15;13198:33;:16;:33;:::i;:::-;:37;:47;:37;:47;:::i;:::-;:51;:117;:51;:117;:::i;:::-;13157:158;-1:-1:-1;13325:19:7;13347:39;:15;13157:158;13347:39;:19;:39;:::i;:::-;13325:61;-1:-1:-1;13404:36:7;13436:3;13404:27;:10;13325:61;13404:27;:14;:27;:::i;:36::-;13397:43;12720:727;-1:-1:-1;;;;;;;12720:727:7:o;4876:1282::-;5003:16;5029;5048:26;5071:2;5048:22;:26::i;:::-;5029:45;;5084:17;5104:27;5128:2;5104:23;:27::i;:::-;5084:47;;5141:24;5180:53;:31;:15;:29;:31::i;:::-;:51;:53::i;:::-;5141:92;;5268:8;5248:16;:28;5244:242;;;5303:8;5292:19;;5244:242;;;5352:9;5332:16;:29;5328:158;;;5388:9;5377:20;;5328:158;;;5428:47;;-1:-1:-1;;;5428:47:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5328:158;5496:21;5520:37;:15;:35;:37::i;:::-;5496:61;;5606:29;:27;:29::i;:::-;5589:13;:46;;5568:128;;;;-1:-1:-1;;;5568:128:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5744:32;:30;:32::i;:::-;5727:13;:49;;5706:117;;;;;-1:-1:-1;;;5706:117:7;;;;;;;;;;;;-1:-1:-1;;;5706:117:7;;;;;;;;;;;;;;;5871:27;:25;:27::i;:::-;5854:13;:44;;5833:120;;;;;-1:-1:-1;;;5833:120:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;6018:56;6031:13;:40;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6031:42:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6031:42:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6031:42:7;6018:8;;:56;:12;:56;:::i;:::-;5985:13;:89;;5964:187;;;;-1:-1:-1;;;5964:187:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:1282;;;;;;;:::o;4382:179::-;4510:13;;:44;;;-1:-1:-1;;;4510:44:7;;;;4480:7;;-1:-1:-1;;;;;4510:13:7;;:42;;:44;;;;;;;;;;;;;;:13;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;4510:44:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4510:44:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4510:44:7;;4382:179;-1:-1:-1;;4382:179:7:o;13589:155::-;13651:7;13677:60;13700:13;:34;:36;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13700:36:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13700:36:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13700:36:7;13677:18;;;;-1:-1:-1;;;13677:18:7;;;;;:22;:60::i;16324:128::-;16427:17;;;;16386:7;;16412:33;;16427:17;;16412:14;:33::i;4013:177::-;4140:13;;:43;;;-1:-1:-1;;;4140:43:7;;;;4110:7;;-1:-1:-1;;;;;4140:13:7;;:41;;:43;;;;;;;;;;;;;;:13;:43;;;5:2:-1;;;;30:1;27;20:12;12092:320:7;12193:7;12216:17;12236:47;12252:13;:28;:30;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12252:30:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12252:30:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12252:30:7;12236:11;;;;;:47;:15;:47;:::i;:::-;12216:67;;12315:9;12297:15;:27;12293:95;;;12347:30;:9;12361:15;12347:30;:13;:30;:::i;:::-;12340:37;;;;;12293:95;-1:-1:-1;12404:1:7;;12092:320;-1:-1:-1;;12092:320:7:o;19405:220::-;19470:28;;;;;;;;;;-1:-1:-1;19470:28:7;;;;;;:23;;;;:28;:::i;:::-;-1:-1:-1;19534:1:7;19508:23;;;:27;;;19545:24;;;:28;;;19583:22;;;;:35;19405:220::o;13961:137::-;14071:19;;;;14025:7;;14051:40;;-1:-1:-1;;;14071:19:7;;;;14051:15;14071:19;14051:11;:15::i;19001:243::-;19171:19;;;;:51;;;-1:-1:-1;;;19171:51:7;;19215:4;19171:51;;;;;;19088:15;;-1:-1:-1;;;;;19171:19:7;;:27;;:51;;;;;;;;;;;;;;:19;:51;;;5:2:-1;;;;30:1;27;20:12;14997:211:7;15102:12;15154:36;15181:8;15154:26;:36::i;:::-;15192:8;15137:64;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;15137:64:7;;;;;-1:-1:-1;15137:64:7;;;26:21:-1;;;6:49;;15137:64:7;;;;;;-1:-1:-1;15137:64:7;14997:211;-1:-1:-1;;;;14997:211:7:o;15417:195::-;15558:22;;;;15582;;;;;15541:64;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;15506:12:7;15541:64;;;;;;15417:195::o;15821:302::-;15881:7;15900:20;15935:62;15950:2;:22;;;15974:2;:22;;;15935:14;:62::i;:::-;15900:97;;16007:20;16030:17;:7;:15;:17::i;:::-;16007:40;-1:-1:-1;16072:20:7;16007:40;16090:1;16072:20;:17;:20;:::i;:::-;16064:29;;;15821:302;-1:-1:-1;;;;15821:302:7:o;10155:1678::-;10535:18;10555:26;10658:28;:14;:26;:28::i;:::-;10650:70;;;;;-1:-1:-1;;;10650:70:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;10751:30;:15;:28;:30::i;:::-;10730:107;;;;;-1:-1:-1;;;10730:107:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;10848:12;10875:196;10926:10;10954:14;10986:15;11019:11;10875:169;;;;;;-1:-1:-1;;;;;10875:169:7;;-1:-1:-1;;;;;10875:169:7;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;10875:169:7;;;;;;;;;;-1:-1:-1;10875:169:7;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;10875:169:7;;;;;;;-1:-1:-1;;;;;10875:169:7;;-1:-1:-1;;;;;10875:169:7;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10875:169:7;;;:194;:196::i;:::-;10848:223;;11096:113;11135:2;11151:15;11180:19;11096:25;:113::i;:::-;11272:18;;;;11082:127;;-1:-1:-1;;;;11272:18:7;;;;11241:27;11082:127;11241:14;:27::i;:::-;:49;;11220:113;;;;;-1:-1:-1;;;11220:113:7;;;;;;;;;;;;-1:-1:-1;;;11220:113:7;;;;;;;;;;;;;;;11344:146;11376:2;11392:4;11410:12;11436:15;11465;11344:18;:146::i;:::-;11724:102;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11724:102:7;;;;;-1:-1:-1;11724:102:7;;;;;;26:21:-1;;;22:32;;6:49;;11724:102:7;;;;;;;-1:-1:-1;10155:1678:7;11724:102;;-1:-1:-1;10155:1678:7;;-1:-1:-1;;;;;;;10155:1678:7:o;6830:533::-;7064:155;7093:49;:37;:15;:35;:37::i;:49::-;7064:5;;7160:12;7190:15;7064:155;:11;:155;:::i;:::-;7043:259;;;;-1:-1:-1;;;7043:259:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7312:44;7336:2;7340:15;7312:23;:44::i;:::-;6830:533;;;;;:::o;16643:164::-;16767:13;;:33;;;-1:-1:-1;;;16767:33:7;;;;16737:7;;-1:-1:-1;;;;;16767:13:7;;:31;;:33;;;;;;;;;;;;;;:13;:33;;;5:2:-1;;;;30:1;27;20:12;14590:987:48;14679:12;14703:22;14735:14;14787:18;14799:5;14787:11;:18::i;:::-;14760:45;;-1:-1:-1;14760:45:48;-1:-1:-1;;;14823:29:48;;;14815:76;;;;-1:-1:-1;;;14815:76:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14918:6;14909;:15;14901:45;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;-1:-1:-1;;;14901:45:48;;;;;;;;;;;;;;;14957:23;14991:12;15035:1;:18;;14991:12;15064:278;15090:6;15085:2;:11;15064:278;;;15132:44;15144:7;15168;15153:5;:12;:22;15132:5;:11;;:44;;;;;:::i;:::-;15119:57;;15197:33;15219:10;15197:21;:33::i;:::-;15190:40;;-1:-1:-1;;15252:4:48;:19;;15244:58;;;;;-1:-1:-1;;;15244:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15316:15;;;;15098:5;;15064:278;;;;15365:44;15377:7;15401;15386:5;:12;:22;15365:5;:11;;:44;;;;;:::i;:::-;15352:57;;15426:33;15448:10;15426:21;:33::i;:::-;15419:40;;-1:-1:-1;;15477:4:48;:19;;15469:58;;;;;-1:-1:-1;;;15469:58:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;15544:26;:5;15556:7;15565:4;15544:26;:11;:26;:::i;:::-;15537:33;14590:987;-1:-1:-1;;;;;;;;14590:987:48:o;17257:1974::-;17323:12;17347:16;17372:7;17380:1;17372:10;;;;;;;;;;;;17649:14;;17372:10;;;;;;-1:-1:-1;17644:1:48;17631:14;;17366:17;17631:32;;17627:75;;-1:-1:-1;;17679:12:48;;;;;;;;;-1:-1:-1;17679:12:48;;;;17627:75;17722:7;17730:1;17722:10;;;;;;;;;;;;;;17712:1413;;17771:1;17758:10;:14;;;17754:65;;;-1:-1:-1;;17792:12:48;;;;;;;;;-1:-1:-1;17792:12:48;;;;17754:65;17832:19;17860:7;17868:2;17860:11;;;;;;;;;;;;;;;-1:-1:-1;;;18048:14:48;;17854:18;18033:29;;;;;:77;;;18067:11;18082:4;18067:19;;:42;;;;;18090:11;18105:4;18090:19;;18067:42;18029:128;;;18130:12;;;;;;;;;;;;;;;;;;18029:128;18177:30;:7;18191:2;18195:11;18177:30;:13;:30;:::i;:::-;18170:37;;;;;;17712:1413;18238:12;18253:28;:7;18276:1;18279;18253:28;:22;:28;:::i;:::-;18328:22;;;-1:-1:-1;;;18328:22:48;;;;;;;;;;;;18238:43;;-1:-1:-1;18320:30:48;;18316:799;;;18514:7;18522:2;18514:11;;;;;;;;;;;;;;;18530:4;18508:26;;;:119;;;18607:20;;;;-1:-1:-1;;;18607:20:48;;;;;;;;;;;;;;18558:45;18598:1;18581:7;:14;:18;18601:1;18558:7;:22;;:45;;;;;:::i;:::-;:69;;18508:119;18504:178;;;18651:12;;;;;;;;;;;;;;;;;;18504:178;18706:21;:7;18720:2;18724;18706:21;:13;:21;:::i;18316:799::-;18779:22;;;-1:-1:-1;;;18779:22:48;;;;;;;;;;;;18771:30;;18767:348;;;18964:7;18989:1;18972:7;:14;:18;18964:27;;;;;;;;;;;;;;;18996:4;18958:42;18954:101;;19024:12;;;;;;;;;;;;;;;;;;18954:101;19079:21;:7;19093:2;19097;19079:21;:13;:21;:::i;18767:348::-;17712:1413;-1:-1:-1;;19134:12:48;;;;;;;;;-1:-1:-1;19134:12:48;;17257:1974;;;:::o;16410:337:49:-;16505:14;16543:16;;;16577:13;;;:38;;;;;16611:4;16594:6;:13;:21;;16577:38;16569:70;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;-1:-1:-1;;;16569:70:49;;;;;;;;;;;;;;;-1:-1:-1;;16693:28:49;;16709:2;16693:28;16683:48;;16659:82::o;10345:924::-;10432:16;10464:12;10460:55;;-1:-1:-1;10492:12:49;;;;;;;;;-1:-1:-1;10492:12:49;;;;10460:55;10536:16;;;10570:13;;;:38;;;;;10604:4;10587:6;:13;:21;;10570:38;10562:70;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;-1:-1:-1;;;10562:70:49;;;;;;;;;;;;;;;10769:4;10763:11;10756:18;;10818:7;10813:2;10808:3;10804:12;10800:26;10794:4;10787:40;10852:7;10847:3;10840:20;10979:6;10971;10967:19;10962:3;10958:29;11055:6;11050:2;11042:6;11038:15;11034:28;11099:7;11094:3;11090:17;11001:252;11130:3;11125;11122:12;11001:252;;;11234:3;11228:10;11221:4;11216:3;11212:14;11205:34;11169:2;11164:3;11160:12;11153:19;;11001:252;;;11005:116;;10652:611;;;;;;;:::o;16172:232::-;16236:14;16266:7;:14;16284:1;16266:19;16262:60;;;-1:-1:-1;16308:3:49;16301:10;;16262:60;-1:-1:-1;16384:2:49;16371:16;16365:23;;16341:57::o;2548:278:48:-;2615:12;2639:22;2674:2;:9;2664:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2664:20:48;87:34:-1;135:17;;-1:-1;2664:20:48;-1:-1:-1;2639:45:48;-1:-1:-1;2700:6:48;2695:98;2716:2;:9;2712:1;:13;2695:98;;;2777:2;2780:1;2777:5;;;;;;;;;;;;;;;;2746:9;2772:1;2768;2756:2;:9;:13;:17;2746:28;;;;;;;;;;;:36;-1:-1:-1;;;;;2746:36:48;;;;;;;;-1:-1:-1;2727:3:48;;2695:98;;;-1:-1:-1;2810:9:48;2548:278;-1:-1:-1;;2548:278:48:o;4382:268::-;4443:7;;;4488:131;4509:2;:9;4505:1;:13;4488:131;;;4599:1;4603;4599:5;4586:2;:9;:19;4581:1;:25;4575:1;:32;4565:2;4568:1;4565:5;;;;;;;;;;;;;;4559:49;4549:59;;;;;4520:3;;4488:131;;1274:179:60;1332:7;1364:1;1359;:6;;1351:49;;;;;-1:-1:-1;;;1351:49:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1422:5:60;;;1274:179::o;19965:189:7:-;20115:31;;;;20066:7;;20096:51;;20104:5;;20115:31;;20096:51;:18;:51;:::i;1693:458:60:-;1751:7;1991:6;1987:45;;-1:-1:-1;2020:1:60;2013:8;;1987:45;2054:5;;;2058:1;2054;:5;:1;2077:5;;;;;:10;2069:56;;;;-1:-1:-1;;;2069:56:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2606:326;2664:7;2761:1;2757;:5;2749:44;;;;;-1:-1:-1;;;2749:44:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;2803:9;2819:1;2815;:5;;;;;;;2606:326;-1:-1:-1;;;;2606:326:60:o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:60;;;;;;;;;;;;;;;;;;;;;;;;;;;22696:316:48;22764:7;22783:15;22801:20;:7;22815:2;22819:1;22801:20;:13;:20;:::i;:::-;22783:38;;22831:8;22848:7;22856:2;22848:11;;;;;;;;;;;;;;;-1:-1:-1;22870:17:48;22890:34;22902:21;22920:2;22902:17;:21::i;22890:34::-;-1:-1:-1;;22951:6:48;;;;22934:23;;22988:3;:16;22975:30;;;;22696:316;-1:-1:-1;;;;22696:316:48:o;23392:178::-;23461:7;23538:25;-1:-1:-1;;;23555:7:48;23538:25;:16;:25;:::i;3308:1172:52:-;3383:24;3479:2;3461:8;:15;:20;;;;;;:25;3457:55;;-1:-1:-1;;;3489:21:52;;3457:55;-1:-1:-1;3563:15:52;;;3620:854;3654:8;:15;3645:6;:24;3620:854;;;3753:20;3776:26;:8;3791:6;3799:2;3776:26;:14;:26;:::i;:::-;3753:49;-1:-1:-1;3894:11:52;;3890:123;;3930:40;3953:7;3962;3930:22;:40::i;:::-;3925:74;;-1:-1:-1;;3973:24:52;;;;;;;3925:74;4060:15;4078:23;:7;:21;:23::i;:::-;4060:41;;4185:21;:7;:19;:21::i;:::-;4175:31;-1:-1:-1;4259:7:52;4223:33;4175:31;4223;:33::i;:::-;:43;4220:100;;;-1:-1:-1;;4286:19:52;;;;;;;;4220:100;4412:51;4433:29;:7;:27;:29::i;:::-;4412:16;;:51;:20;:51;:::i;:::-;4393:70;-1:-1:-1;;;3681:2:52;3671:12;3620:854;;;;3308:1172;;;;:::o;826:97::-;-1:-1:-1;;826:97:52;;:::o;929:103::-;-1:-1:-1;;929:103:52;:::o;1038:93::-;-1:-1:-1;;1038:93:52;:::o;5313:152:48:-;5370:12;5418:39;5445:10;5452:2;5445:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5445:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5445:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5445:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5445:10:48;5428:28;;;5445:10;5428:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5428:28:48;;;;;;;5418:39;;5428:28;;;;5418:39;;;;;5428:28;5418:39;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5418:39:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5418:39:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;5418:39:48;;;;;;;-1:-1:-1;;;;;;5401:57:48;;;;;;;;26:21:-1;;;22:32;6:49;;5401:57:48;;;;;;;;5313:152;-1:-1:-1;;;5313:152:48:o;11275:422:49:-;11352:7;11397:2;11388:11;;11417:18;;;:48;;;;;11456:9;11439:6;:13;:26;;11417:48;11409:94;;;;-1:-1:-1;;;11409:94:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11591:30:49;11607:4;11591:30;11585:37;-1:-1:-1;;;11581:71:49;;;11275:422::o;19573:1058:48:-;19636:4;19652:22;19684:13;19734:17;19746:4;19734:11;:17::i;:::-;19708:43;;-1:-1:-1;19708:43:48;-1:-1:-1;19830:10:48;;;:43;;;-1:-1:-1;;19844:14:48;:29;19830:43;19826:86;;;19896:5;19889:12;;;;;;19826:86;19940:1;:18;;19922:15;19969:559;19993:5;19989:1;:9;19969:559;;;20092:4;:11;20081:7;:22;20077:73;;20130:5;20123:12;;;;;;;;20077:73;20225:18;20246:42;20257:7;20280;20266:4;:11;:21;20246:4;:10;;:42;;;;;:::i;:::-;20225:63;;20302:16;20321:27;20342:5;20321:20;:27::i;:::-;20302:46;;-1:-1:-1;;20366:8:48;:23;20362:74;;;20416:5;20409:12;;;;;;;;;;20362:74;20498:19;;;;;-1:-1:-1;20000:3:48;;19969:559;;;-1:-1:-1;20613:11:48;;20602:22;;-1:-1:-1;;;19573:1058:48;;;:::o;20903:1072::-;20968:4;20984:22;21016:14;21068:18;21080:5;21068:11;:18::i;:::-;21041:45;;-1:-1:-1;21041:45:48;-1:-1:-1;21166:11:48;;;:44;;;-1:-1:-1;;21181:14:48;:29;21166:44;21162:87;;;21233:5;21226:12;;;;;;21162:87;21277:1;:18;;21259:15;21306:565;21330:6;21326:1;:10;21306:565;;;21430:5;:12;21419:7;:23;21415:74;;21469:5;21462:12;;;;;;;;21415:74;21613:18;21634:44;21646:7;21670;21655:5;:12;:22;21634:5;:11;;:44;;;;;:::i;:::-;21613:65;;21692:16;21711:28;21733:5;21711:21;:28::i;:::-;21692:47;;-1:-1:-1;;21757:8:48;:23;21753:74;;;21807:5;21800:12;;;;;;;;;;21753:74;21841:19;;;;;-1:-1:-1;21338:3:48;;21306:565;;5703:126;5760:7;5786:36;5810:10;5817:2;5810:10;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5810:10:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5810:10:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5810:10:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5810:10:48;5793:28;;;5810:10;5793:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;5793:28:48;;;;;;;5786:36;;5793:28;;;;5786:36;;;;;5793:28;5786:36;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5786:36:48;;;;;;;-1:-1:-1;263:2;;-1:-1;;5786:36:48;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5786:36:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;22309:133:48;22383:12;22414:21;:7;22428:2;22432;22414:21;:13;:21;:::i;1686:527:52:-;1844:4;1914:11;1905:5;:20;:35;;;;-1:-1:-1;1929:11:52;;1905:35;:69;;;;-1:-1:-1;1944:25:52;;:30;1905:69;1901:111;;;-1:-1:-1;1997:4:52;1990:11;;1901:111;2022:19;2061:5;2068:18;2088:11;2044:56;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2044:56:52;;;;;-1:-1:-1;2044:56:52;;;26:21:-1;;;6:49;;2044:56:52;;;;;;-1:-1:-1;2044:56:52;-1:-1:-1;2172:34:52;;-1:-1:-1;2044:56:52;;-1:-1:-1;2199:6:52;2172:26;:34::i;:::-;2165:41;;;1686:527;;;;;;;:::o;1907:424:48:-;1968:7;1977;1996:14;2013:29;2039:2;2013:25;:29::i;:::-;1996:46;-1:-1:-1;2057:13:48;;;2053:68;;2094:1;2103:2;2106:1;2103:5;;;;;;;;;;;;2086:24;;-1:-1:-1;2103:5:48;;;-1:-1:-1;2086:24:48;;-1:-1:-1;2086:24:48;2053:68;2150:8;2146:1;:12;2134:24;;:2;:9;:24;2130:78;;;-1:-1:-1;;;655:66:48;-1:-1:-1;2195:1:48;;-1:-1:-1;2174:23:48;;2130:78;2217:15;2235:53;2247:40;2265:21;:2;2274:1;2265:21;;;;:8;:21;:::i;:::-;2247:17;:40::i;2235:53::-;2298:26;;;;;-1:-1:-1;2217:71:48;;-1:-1:-1;;1907:424:48;;;;:::o;13643:582::-;13719:7;13759:1;13742:7;:14;:18;13738:67;;;-1:-1:-1;;;13776:18:48;;13738:67;13814:24;13841:36;13855:1;13875;13858:7;:14;:18;13841:7;:13;;:36;;;;;:::i;:::-;13814:63;;13888:22;13920:27;13997:24;14009:11;13997;:24::i;:::-;13957:64;;-1:-1:-1;13957:64:48;-1:-1:-1;;;14036:29:48;;14032:78;;;-1:-1:-1;;14081:18:48;;;;;;;14032:78;14174:44;:5;:44;;-1:-1:-1;;13643:582:48;;;:::o;1865:301:51:-;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:51:o;5322:391:52:-;5426:4;5489:17;5509:40;:28;:7;:26;:28::i;:40::-;5489:60;;5651:17;5638:9;:30;5634:51;;5678:5;5671:12;;;;;5634:51;-1:-1:-1;5702:4:52;;5322:391;-1:-1:-1;;;5322:391:52:o;6060:362:48:-;6121:11;6248:4;6242:11;6318:2;6313:3;6308:2;6302:9;6297:2;6293;6289:11;6286:1;6281:3;6270:51;6266:56;6372:2;6367:3;6363:2;6358:3;6355:1;6350:3;6339:36;-1:-1:-1;6396:10:48;;6217:199;-1:-1:-1;;6217:199:48:o;3088:1044::-;3382:1;3213:6;;;3311:66;3212:77;3306;;;;;;;;;3211:173;3604:2;3434:7;;;3533:66;3433:78;3528;;;;;;;;;3432:175;3827:2;3657:7;;;3756:66;3656:78;3751;;;;;;;;;3655:175;4050:2;3880:7;;;3979:66;3879:78;-1:-1:-1;;3974:78:48;;;;;;;;3878:175;4121:3;4103:8;;;4116;;;4102:23;;3088:1044::o;2520:172:51:-;2605:7;;;2630;;;;2622:45;;;;;-1:-1:-1;;;2622:45:51;;;;;;;;;;;;;;;;;;;;;;;;;;;9151:372:48;9225:7;9244:22;9276:21;9341:27;9361:6;9341:19;:27::i;:::-;9307:61;;-1:-1:-1;9307:61:48;-1:-1:-1;;;9382:29:48;;9378:78;;;-1:-1:-1;;9427:18:48;;;;;;9378:78;9473:39;:43;;;9151:372;-1:-1:-1;;9151:372:48:o;25770:1009::-;25856:4;25932:2;25916:6;:13;:18;;;;;;:23;25912:66;;-1:-1:-1;25962:5:48;25955:12;;25912:66;26041:6;:13;26058:2;26041:19;26037:61;;;-1:-1:-1;26083:4:48;26076:11;;26037:61;26142:6;:13;26159:2;26142:19;26138:62;;;-1:-1:-1;26184:5:48;26177:12;;26138:62;26267:13;;26222:6;;26210:9;;26254:48;;:36;;26267:6;;-1:-1:-1;;26267:18:48;26283:2;26254:36;:12;:36;:::i;:48::-;26238:64;-1:-1:-1;26312:16:48;26331:31;:19;:6;26312:16;26347:2;26331:19;:12;:19;:::i;:31::-;26312:50;-1:-1:-1;26387:1:48;26373:366;26395:13;;26420:1;;26395:21;;26413:2;26395:21;:17;:21;:::i;:::-;26394:27;26390:1;:31;26373:366;;;26453:1;26446:4;:8;26458:1;26446:13;26442:257;;;26490:72;26509:24;:6;26526:2;26522:6;;;;26509:24;:12;:24;:::i;:::-;26552:8;26535:26;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26535:26:48;;;26490:18;:72::i;:::-;26479:83;;26442:257;;;26631:26;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;26631:26:48;;;;;;26612:72;;26659:24;;:6;;26672;;;;26659:24;:12;:24;:::i;:::-;26612:18;:72::i;:::-;26601:83;;26442:257;26727:1;26719:9;;;;26423:3;26373:366;;;-1:-1:-1;26755:17:48;;25770:1009;-1:-1:-1;;;;25770:1009:48:o;1052:437::-;1130:5;1157;1163:1;1157:8;;;;;;;;;;;;;;;1151:15;:23;1147:94;;;-1:-1:-1;1197:1:48;1190:8;;1147:94;1260:5;1266:1;1260:8;;;;;;;;;;;;;;;1273:4;1254:23;1250:94;;;-1:-1:-1;1300:1:48;1293:8;;1250:94;1363:5;1369:1;1363:8;;;;;;;;;;;;;;;1376:4;1357:23;1353:94;;;-1:-1:-1;1403:1:48;1396:8;;1353:94;-1:-1:-1;1464:1:48;1052:437;;;:::o;23829:131::-;23902:12;23933:20;:7;23947:1;23950:2;23933:20;:13;:20;:::i;8454:439::-;8527:7;8536;8575:2;8559:6;:13;:18;8555:72;;;-1:-1:-1;;;655:66:48;-1:-1:-1;8614:1:48;8593:23;;8555:72;8636:27;8666:36;8679:2;8699;8683:6;:13;:18;8666:6;:12;;:36;;;;;:::i;:::-;8636:66;;8713:22;8745:21;8810:27;8822:14;8810:11;:27::i;:::-;8776:61;;-1:-1:-1;8776:61:48;-1:-1:-1;;;;8454:439:48;;;:::o;25298:151::-;25383:7;25409:33;25434:2;25438;25417:24;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;25417:24:48;;;;;;;;;;-1:-1:-1;25417:24:48;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;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;;;25417:24:48;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25417:24:48;;;25409:7;:33::i;802:28542:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;802:28542:7;;;-1:-1:-1;802:28542:7;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity 0.5.17;\n\nimport {ValidateSPV} from \"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\";\nimport {BTCUtils} from \"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\";\nimport {BytesLib} from \"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\";\nimport {\n    IBondedECDSAKeep\n} from \"@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol\";\nimport {\n    IERC721\n} from \"openzeppelin-solidity/contracts/token/ERC721/IERC721.sol\";\nimport {SafeMath} from \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport {DepositStates} from \"./DepositStates.sol\";\nimport {TBTCConstants} from \"../system/TBTCConstants.sol\";\nimport {ITBTCSystem} from \"../interfaces/ITBTCSystem.sol\";\nimport {TBTCToken} from \"../system/TBTCToken.sol\";\nimport {FeeRebateToken} from \"../system/FeeRebateToken.sol\";\n\nlibrary DepositUtils {\n    using SafeMath for uint256;\n    using SafeMath for uint64;\n    using BytesLib for bytes;\n    using BTCUtils for bytes;\n    using BTCUtils for uint256;\n    using ValidateSPV for bytes;\n    using ValidateSPV for bytes32;\n    using DepositStates for DepositUtils.Deposit;\n\n    struct Deposit {\n        // SET DURING CONSTRUCTION\n        ITBTCSystem tbtcSystem;\n        TBTCToken tbtcToken;\n        IERC721 tbtcDepositToken;\n        FeeRebateToken feeRebateToken;\n        address vendingMachineAddress;\n        uint64 lotSizeSatoshis;\n        uint8 currentState;\n        uint16 signerFeeDivisor;\n        uint16 initialCollateralizedPercent;\n        uint16 undercollateralizedThresholdPercent;\n        uint16 severelyUndercollateralizedThresholdPercent;\n        uint256 keepSetupFee;\n        // SET ON FRAUD\n        uint256 liquidationInitiated; // Timestamp of when liquidation starts\n        uint256 courtesyCallInitiated; // When the courtesy call is issued\n        address payable liquidationInitiator;\n        // written when we request a keep\n        address keepAddress; // The address of our keep contract\n        uint256 signingGroupRequestedAt; // timestamp of signing group request\n        // written when we get a keep result\n        uint256 fundingProofTimerStart; // start of the funding proof period. reused for funding fraud proof period\n        bytes32 signingGroupPubkeyX; // The X coordinate of the signing group's pubkey\n        bytes32 signingGroupPubkeyY; // The Y coordinate of the signing group's pubkey\n        // INITIALLY WRITTEN BY REDEMPTION FLOW\n        address payable redeemerAddress; // The redeemer's address, used as fallback for fraud in redemption\n        bytes redeemerOutputScript; // The redeemer output script\n        uint256 initialRedemptionFee; // the initial fee as requested\n        uint256 latestRedemptionFee; // the fee currently required by a redemption transaction\n        uint256 withdrawalRequestTime; // the most recent withdrawal request timestamp\n        bytes32 lastRequestedDigest; // the digest most recently requested for signing\n        // written when we get funded\n        bytes8 utxoValueBytes; // LE uint. the size of the deposit UTXO in satoshis\n        uint256 fundedAt; // timestamp when funding proof was received\n        bytes utxoOutpoint; // the 36-byte outpoint of the custodied UTXO\n        /// @dev Map of ETH balances an address can withdraw after contract reaches ends-state.\n        mapping(address => uint256) withdrawableAmounts;\n        /// @dev Map of timestamps representing when transaction digests were approved for signing\n        mapping(bytes32 => uint256) approvedDigests;\n    }\n\n    /// @notice Closes keep associated with the deposit.\n    /// @dev Should be called when the keep is no longer needed and the signing\n    /// group can disband.\n    function closeKeep(DepositUtils.Deposit storage _d) internal {\n        IBondedECDSAKeep _keep = IBondedECDSAKeep(_d.keepAddress);\n        _keep.closeKeep();\n    }\n\n    /// @notice         Gets the current block difficulty.\n    /// @dev            Calls the light relay and gets the current block difficulty.\n    /// @return         The difficulty.\n    function currentBlockDifficulty(Deposit storage _d)\n        public\n        view\n        returns (uint256)\n    {\n        return _d.tbtcSystem.fetchRelayCurrentDifficulty();\n    }\n\n    /// @notice         Gets the previous block difficulty.\n    /// @dev            Calls the light relay and gets the previous block difficulty.\n    /// @return         The difficulty.\n    function previousBlockDifficulty(Deposit storage _d)\n        public\n        view\n        returns (uint256)\n    {\n        return _d.tbtcSystem.fetchRelayPreviousDifficulty();\n    }\n\n    /// @notice                     Evaluates the header difficulties in a proof.\n    /// @dev                        Uses the light oracle to source recent difficulty.\n    /// @param  _bitcoinHeaders     The header chain to evaluate.\n    /// @return                     True if acceptable, otherwise revert.\n    function evaluateProofDifficulty(\n        Deposit storage _d,\n        bytes memory _bitcoinHeaders\n    ) public view {\n        uint256 _reqDiff;\n        uint256 _current = currentBlockDifficulty(_d);\n        uint256 _previous = previousBlockDifficulty(_d);\n        uint256 _firstHeaderDiff =\n            _bitcoinHeaders.extractTarget().calculateDifficulty();\n\n        if (_firstHeaderDiff == _current) {\n            _reqDiff = _current;\n        } else if (_firstHeaderDiff == _previous) {\n            _reqDiff = _previous;\n        } else {\n            revert(\"not at current or previous difficulty\");\n        }\n\n        uint256 _observedDiff = _bitcoinHeaders.validateHeaderChain();\n\n        require(\n            _observedDiff != ValidateSPV.getErrBadLength(),\n            \"Invalid length of the headers chain\"\n        );\n        require(\n            _observedDiff != ValidateSPV.getErrInvalidChain(),\n            \"Invalid headers chain\"\n        );\n        require(\n            _observedDiff != ValidateSPV.getErrLowWork(),\n            \"Insufficient work in a header\"\n        );\n\n        require(\n            _observedDiff >=\n                _reqDiff.mul(TBTCConstants.getTxProofDifficultyFactor()),\n            \"Insufficient accumulated difficulty in header chain\"\n        );\n    }\n\n    /// @notice                 Syntactically check an SPV proof for a bitcoin transaction with its hash (ID).\n    /// @dev                    Stateless SPV Proof verification documented elsewhere (see https://github.com/summa-tx/bitcoin-spv).\n    /// @param _d               Deposit storage pointer.\n    /// @param _txId            The bitcoin txid of the tx that is purportedly included in the header chain.\n    /// @param _merkleProof     The merkle proof of inclusion of the tx in the bitcoin block.\n    /// @param _txIndexInBlock  The index of the tx in the Bitcoin block (0-indexed).\n    /// @param _bitcoinHeaders  An array of tightly-packed bitcoin headers.\n    function checkProofFromTxId(\n        Deposit storage _d,\n        bytes32 _txId,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public view {\n        require(\n            _txId.prove(\n                _bitcoinHeaders.extractMerkleRootLE().toBytes32(),\n                _merkleProof,\n                _txIndexInBlock\n            ),\n            \"Tx merkle proof is not valid for provided header and txId\"\n        );\n        evaluateProofDifficulty(_d, _bitcoinHeaders);\n    }\n\n    /// @notice                     Find and validate funding output in transaction output vector using the index.\n    /// @dev                        Gets `_fundingOutputIndex` output from the output vector and validates if it is\n    ///                             a p2wpkh output with public key hash matching this deposit's public key hash.\n    /// @param _d                   Deposit storage pointer.\n    /// @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC outputs.\n    /// @param _fundingOutputIndex  Index of funding output in _txOutputVector.\n    /// @return                     Funding value.\n    function findAndParseFundingOutput(\n        DepositUtils.Deposit storage _d,\n        bytes memory _txOutputVector,\n        uint8 _fundingOutputIndex\n    ) public view returns (bytes8) {\n        bytes8 _valueBytes;\n        bytes memory _output;\n\n        // Find the output paying the signer PKH\n        _output = _txOutputVector.extractOutputAtIndex(_fundingOutputIndex);\n\n        require(\n            keccak256(_output.extractHash()) ==\n                keccak256(abi.encodePacked(signerPKH(_d))),\n            \"Could not identify output funding the required public key hash\"\n        );\n        require(\n            _output.length == 31 &&\n                _output.keccak256Slice(8, 23) ==\n                keccak256(abi.encodePacked(hex\"160014\", signerPKH(_d))),\n            \"Funding transaction output type unsupported: only p2wpkh outputs are supported\"\n        );\n\n        _valueBytes = bytes8(_output.slice(0, 8).toBytes32());\n        return _valueBytes;\n    }\n\n    /// @notice                     Validates the funding tx and parses information from it.\n    /// @dev                        Takes a pre-parsed transaction and calculates values needed to verify funding.\n    /// @param  _d                  Deposit storage pointer.\n    /// @param _txVersion           Transaction version number (4-byte LE).\n    /// @param _txInputVector       All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n    /// @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n    /// @param _txLocktime          Final 4 bytes of the transaction.\n    /// @param _fundingOutputIndex  Index of funding output in _txOutputVector (0-indexed).\n    /// @param _merkleProof         The merkle proof of transaction inclusion in a block.\n    /// @param _txIndexInBlock      Transaction index in the block (0-indexed).\n    /// @param _bitcoinHeaders      Single bytestring of 80-byte bitcoin headers, lowest height first.\n    /// @return                     The 8-byte LE UTXO size in satoshi, the 36byte outpoint.\n    function validateAndParseFundingSPVProof(\n        DepositUtils.Deposit storage _d,\n        bytes4 _txVersion,\n        bytes memory _txInputVector,\n        bytes memory _txOutputVector,\n        bytes4 _txLocktime,\n        uint8 _fundingOutputIndex,\n        bytes memory _merkleProof,\n        uint256 _txIndexInBlock,\n        bytes memory _bitcoinHeaders\n    ) public view returns (bytes8 _valueBytes, bytes memory _utxoOutpoint) {\n        // not external to allow bytes memory parameters\n        require(_txInputVector.validateVin(), \"invalid input vector provided\");\n        require(\n            _txOutputVector.validateVout(),\n            \"invalid output vector provided\"\n        );\n\n        bytes32 txID =\n            abi\n                .encodePacked(\n                _txVersion,\n                _txInputVector,\n                _txOutputVector,\n                _txLocktime\n            )\n                .hash256();\n\n        _valueBytes = findAndParseFundingOutput(\n            _d,\n            _txOutputVector,\n            _fundingOutputIndex\n        );\n\n        require(\n            bytes8LEToUint(_valueBytes) >= _d.lotSizeSatoshis,\n            \"Deposit too small\"\n        );\n\n        checkProofFromTxId(\n            _d,\n            txID,\n            _merkleProof,\n            _txIndexInBlock,\n            _bitcoinHeaders\n        );\n\n        // The utxoOutpoint is the LE txID plus the index of the output as a 4-byte LE int\n        // _fundingOutputIndex is a uint8, so we know it is only 1 byte\n        // Therefore, pad with 3 more bytes\n        _utxoOutpoint = abi.encodePacked(\n            txID,\n            _fundingOutputIndex,\n            hex\"000000\"\n        );\n    }\n\n    /// @notice Retreive the remaining term of the deposit\n    /// @dev    The return value is not guaranteed since block.timestmap can be lightly manipulated by miners.\n    /// @return The remaining term of the deposit in seconds. 0 if already at term\n    function remainingTerm(DepositUtils.Deposit storage _d)\n        public\n        view\n        returns (uint256)\n    {\n        uint256 endOfTerm = _d.fundedAt.add(TBTCConstants.getDepositTerm());\n        if (block.timestamp < endOfTerm) {\n            return endOfTerm.sub(block.timestamp);\n        }\n        return 0;\n    }\n\n    /// @notice     Calculates the amount of value at auction right now.\n    /// @dev        We calculate the % of the auction that has elapsed, then scale the value up.\n    /// @param _d   Deposit storage pointer.\n    /// @return     The value in wei to distribute in the auction at the current time.\n    function auctionValue(Deposit storage _d) external view returns (uint256) {\n        uint256 _elapsed = block.timestamp.sub(_d.liquidationInitiated);\n        uint256 _available = address(this).balance;\n        if (_elapsed > TBTCConstants.getAuctionDuration()) {\n            return _available;\n        }\n\n        // This should make a smooth flow from base% to 100%\n        uint256 _basePercentage = getAuctionBasePercentage(_d);\n        uint256 _elapsedPercentage =\n            uint256(100).sub(_basePercentage).mul(_elapsed).div(\n                TBTCConstants.getAuctionDuration()\n            );\n        uint256 _percentage = _basePercentage.add(_elapsedPercentage);\n\n        return _available.mul(_percentage).div(100);\n    }\n\n    /// @notice         Gets the lot size in erc20 decimal places (max 18)\n    /// @return         uint256 lot size in 10**18 decimals.\n    function lotSizeTbtc(Deposit storage _d) public view returns (uint256) {\n        return _d.lotSizeSatoshis.mul(TBTCConstants.getSatoshiMultiplier());\n    }\n\n    /// @notice         Determines the fees due to the signers for work performed.\n    /// @dev            Signers are paid based on the TBTC issued.\n    /// @return         Accumulated fees in 10**18 decimals.\n    function signerFeeTbtc(Deposit storage _d) public view returns (uint256) {\n        return lotSizeTbtc(_d).div(_d.signerFeeDivisor);\n    }\n\n    /// @notice             Determines the prefix to the compressed public key.\n    /// @dev                The prefix encodes the parity of the Y coordinate.\n    /// @param  _pubkeyY    The Y coordinate of the public key.\n    /// @return             The 1-byte prefix for the compressed key.\n    function determineCompressionPrefix(bytes32 _pubkeyY)\n        public\n        pure\n        returns (bytes memory)\n    {\n        if (uint256(_pubkeyY) & 1 == 1) {\n            return hex\"03\"; // Odd Y\n        } else {\n            return hex\"02\"; // Even Y\n        }\n    }\n\n    /// @notice             Compresses a public key.\n    /// @dev                Converts the 64-byte key to a 33-byte key, bitcoin-style.\n    /// @param  _pubkeyX    The X coordinate of the public key.\n    /// @param  _pubkeyY    The Y coordinate of the public key.\n    /// @return             The 33-byte compressed pubkey.\n    function compressPubkey(bytes32 _pubkeyX, bytes32 _pubkeyY)\n        public\n        pure\n        returns (bytes memory)\n    {\n        return abi.encodePacked(determineCompressionPrefix(_pubkeyY), _pubkeyX);\n    }\n\n    /// @notice    Returns the packed public key (64 bytes) for the signing group.\n    /// @dev       We store it as 2 bytes32, (2 slots) then repack it on demand.\n    /// @return    64 byte public key.\n    function signerPubkey(Deposit storage _d)\n        external\n        view\n        returns (bytes memory)\n    {\n        return abi.encodePacked(_d.signingGroupPubkeyX, _d.signingGroupPubkeyY);\n    }\n\n    /// @notice    Returns the Bitcoin pubkeyhash (hash160) for the signing group.\n    /// @dev       This is used in bitcoin output scripts for the signers.\n    /// @return    20-bytes public key hash.\n    function signerPKH(Deposit storage _d) public view returns (bytes20) {\n        bytes memory _pubkey =\n            compressPubkey(_d.signingGroupPubkeyX, _d.signingGroupPubkeyY);\n        bytes memory _digest = _pubkey.hash160();\n        return bytes20(_digest.toAddress(0)); // dirty solidity hack\n    }\n\n    /// @notice    Returns the size of the deposit UTXO in satoshi.\n    /// @dev       We store the deposit as bytes8 to make signature checking easier.\n    /// @return    UTXO value in satoshi.\n    function utxoValue(Deposit storage _d) external view returns (uint256) {\n        return bytes8LEToUint(_d.utxoValueBytes);\n    }\n\n    /// @notice     Gets the current price of Bitcoin in Ether.\n    /// @dev        Polls the price feed via the system contract.\n    /// @return     The current price of 1 sat in wei.\n    function fetchBitcoinPrice(Deposit storage _d)\n        external\n        view\n        returns (uint256)\n    {\n        return _d.tbtcSystem.fetchBitcoinPrice();\n    }\n\n    /// @notice     Fetches the Keep's bond amount in wei.\n    /// @dev        Calls the keep contract to do so.\n    /// @return     The amount of bonded ETH in wei.\n    function fetchBondAmount(Deposit storage _d)\n        external\n        view\n        returns (uint256)\n    {\n        IBondedECDSAKeep _keep = IBondedECDSAKeep(_d.keepAddress);\n        return _keep.checkBondAmount();\n    }\n\n    /// @notice         Convert a LE bytes8 to a uint256.\n    /// @dev            Do this by converting to bytes, then reversing endianness, then converting to int.\n    /// @return         The uint256 represented in LE by the bytes8.\n    function bytes8LEToUint(bytes8 _b) public pure returns (uint256) {\n        return abi.encodePacked(_b).reverseEndianness().bytesToUint();\n    }\n\n    /// @notice         Gets timestamp of digest approval for signing.\n    /// @dev            Identifies entry in the recorded approvals by keep ID and digest pair.\n    /// @param _digest  Digest to check approval for.\n    /// @return         Timestamp from the moment of recording the digest for signing.\n    ///                 Returns 0 if the digest was not approved for signing.\n    function wasDigestApprovedForSigning(Deposit storage _d, bytes32 _digest)\n        external\n        view\n        returns (uint256)\n    {\n        return _d.approvedDigests[_digest];\n    }\n\n    /// @notice         Looks up the Fee Rebate Token holder.\n    /// @return         The current token holder if the Token exists.\n    ///                 address(0) if the token does not exist.\n    function feeRebateTokenHolder(Deposit storage _d)\n        public\n        view\n        returns (address payable)\n    {\n        address tokenHolder = address(0);\n        if (_d.feeRebateToken.exists(uint256(address(this)))) {\n            tokenHolder = address(\n                uint160(_d.feeRebateToken.ownerOf(uint256(address(this))))\n            );\n        }\n        return address(uint160(tokenHolder));\n    }\n\n    /// @notice         Looks up the deposit beneficiary by calling the tBTC system.\n    /// @dev            We cast the address to a uint256 to match the 721 standard.\n    /// @return         The current deposit beneficiary.\n    function depositOwner(Deposit storage _d)\n        public\n        view\n        returns (address payable)\n    {\n        return\n            address(\n                uint160(_d.tbtcDepositToken.ownerOf(uint256(address(this))))\n            );\n    }\n\n    /// @notice     Deletes state after termination of redemption process.\n    /// @dev        We keep around the redeemer address so we can pay them out.\n    function redemptionTeardown(Deposit storage _d) public {\n        _d.redeemerOutputScript = \"\";\n        _d.initialRedemptionFee = 0;\n        _d.withdrawalRequestTime = 0;\n        _d.lastRequestedDigest = bytes32(0);\n    }\n\n    /// @notice     Get the starting percentage of the bond at auction.\n    /// @dev        This will return the same value regardless of collateral price.\n    /// @return     The percentage of the InitialCollateralizationPercent that will result\n    ///             in a 100% bond value base auction given perfect collateralization.\n    function getAuctionBasePercentage(Deposit storage _d)\n        internal\n        view\n        returns (uint256)\n    {\n        return uint256(10000).div(_d.initialCollateralizedPercent);\n    }\n\n    /// @notice     Seize the signer bond from the keep contract.\n    /// @dev        we check our balance before and after.\n    /// @return     The amount seized in wei.\n    function seizeSignerBonds(Deposit storage _d) internal returns (uint256) {\n        uint256 _preCallBalance = address(this).balance;\n\n        IBondedECDSAKeep _keep = IBondedECDSAKeep(_d.keepAddress);\n        _keep.seizeSignerBonds();\n\n        uint256 _postCallBalance = address(this).balance;\n        require(\n            _postCallBalance > _preCallBalance,\n            \"No funds received, unexpected\"\n        );\n        return _postCallBalance.sub(_preCallBalance);\n    }\n\n    /// @notice     Adds a given amount to the withdraw allowance for the address.\n    /// @dev        Withdrawals can only happen when a contract is in an end-state.\n    function enableWithdrawal(\n        DepositUtils.Deposit storage _d,\n        address _withdrawer,\n        uint256 _amount\n    ) internal {\n        _d.withdrawableAmounts[_withdrawer] = _d.withdrawableAmounts[\n            _withdrawer\n        ]\n            .add(_amount);\n    }\n\n    /// @notice     Withdraw caller's allowance.\n    /// @dev        Withdrawals can only happen when a contract is in an end-state.\n    function withdrawFunds(DepositUtils.Deposit storage _d) internal {\n        uint256 available = _d.withdrawableAmounts[msg.sender];\n\n        require(_d.inEndState(), \"Contract not yet terminated\");\n        require(available > 0, \"Nothing to withdraw\");\n        require(\n            address(this).balance >= available,\n            \"Insufficient contract balance\"\n        );\n\n        // zero-out to prevent reentrancy\n        _d.withdrawableAmounts[msg.sender] = 0;\n\n        /* solium-disable-next-line security/no-call-value */\n        (bool ok, ) = msg.sender.call.value(available)(\"\");\n        require(ok, \"Failed to send withdrawable amount to sender\");\n    }\n\n    /// @notice     Get the caller's withdraw allowance.\n    /// @return     The caller's withdraw allowance in wei.\n    function getWithdrawableAmount(DepositUtils.Deposit storage _d)\n        internal\n        view\n        returns (uint256)\n    {\n        return _d.withdrawableAmounts[msg.sender];\n    }\n\n    /// @notice     Distributes the fee rebate to the Fee Rebate Token owner.\n    /// @dev        Whenever this is called we are shutting down.\n    function distributeFeeRebate(Deposit storage _d) internal {\n        address rebateTokenHolder = feeRebateTokenHolder(_d);\n\n        // exit the function if there is nobody to send the rebate to\n        if (rebateTokenHolder == address(0)) {\n            return;\n        }\n\n        // pay out the rebate if it is available\n        if (_d.tbtcToken.balanceOf(address(this)) >= signerFeeTbtc(_d)) {\n            _d.tbtcToken.transfer(rebateTokenHolder, signerFeeTbtc(_d));\n        }\n    }\n\n    /// @notice             Pushes ether held by the deposit to the signer group.\n    /// @dev                Ether is returned to signing group members bonds.\n    /// @param  _ethValue   The amount of ether to send.\n    function pushFundsToKeepGroup(Deposit storage _d, uint256 _ethValue)\n        internal\n    {\n        require(address(this).balance >= _ethValue, \"Not enough funds to send\");\n        if (_ethValue > 0) {\n            IBondedECDSAKeep _keep = IBondedECDSAKeep(_d.keepAddress);\n            _keep.returnPartialSignerBonds.value(_ethValue)();\n        }\n    }\n\n    /// @notice Calculate TBTC amount required for redemption by a specified\n    ///         _redeemer. If _assumeRedeemerHoldTdt is true, return the\n    ///         requirement as if the redeemer holds this deposit's TDT.\n    /// @dev Will revert if redemption is not possible by the current owner and\n    ///      _assumeRedeemerHoldsTdt was not set. Setting\n    ///      _assumeRedeemerHoldsTdt only when appropriate is the responsibility\n    ///      of the caller; as such, this function should NEVER be publicly\n    ///      exposed.\n    /// @param _redeemer The account that should be treated as redeeming this\n    ///        deposit  for the purposes of this calculation.\n    /// @param _assumeRedeemerHoldsTdt If true, the calculation assumes that the\n    ///        specified redeemer holds the TDT. If false, the calculation\n    ///        checks the deposit owner against the specified _redeemer. Note\n    ///        that this parameter should be false for all mutating calls to\n    ///        preserve system correctness.\n    /// @return A tuple of the amount the redeemer owes to the deposit to\n    ///         initiate redemption, the amount that is owed to the TDT holder\n    ///         when redemption is initiated, and the amount that is owed to the\n    ///         FRT holder when redemption is initiated.\n    function calculateRedemptionTbtcAmounts(\n        DepositUtils.Deposit storage _d,\n        address _redeemer,\n        bool _assumeRedeemerHoldsTdt\n    )\n        internal\n        view\n        returns (\n            uint256 owedToDeposit,\n            uint256 owedToTdtHolder,\n            uint256 owedToFrtHolder\n        )\n    {\n        bool redeemerHoldsTdt =\n            _assumeRedeemerHoldsTdt || depositOwner(_d) == _redeemer;\n        bool preTerm = remainingTerm(_d) > 0 && !_d.inCourtesyCall();\n\n        require(\n            redeemerHoldsTdt || !preTerm,\n            \"Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL\"\n        );\n\n        bool frtExists = feeRebateTokenHolder(_d) != address(0);\n        bool redeemerHoldsFrt = feeRebateTokenHolder(_d) == _redeemer;\n        uint256 signerFee = signerFeeTbtc(_d);\n\n        uint256 feeEscrow =\n            calculateRedemptionFeeEscrow(\n                signerFee,\n                preTerm,\n                frtExists,\n                redeemerHoldsTdt,\n                redeemerHoldsFrt\n            );\n\n        // Base redemption + fee = total we need to have escrowed to start\n        // redemption.\n        owedToDeposit = calculateBaseRedemptionCharge(\n            lotSizeTbtc(_d),\n            redeemerHoldsTdt\n        )\n            .add(feeEscrow);\n\n        // Adjust the amount owed to the deposit based on any balance the\n        // deposit already has.\n        uint256 balance = _d.tbtcToken.balanceOf(address(this));\n        if (owedToDeposit > balance) {\n            owedToDeposit = owedToDeposit.sub(balance);\n        } else {\n            owedToDeposit = 0;\n        }\n\n        // Pre-term, the FRT rebate is payed out, but if the redeemer holds the\n        // FRT, the amount has already been subtracted from what is owed to the\n        // deposit at this point (by calculateRedemptionFeeEscrow). This allows\n        // the redeemer to simply *not pay* the fee rebate, rather than having\n        // them pay it only to have it immediately returned.\n        if (preTerm && frtExists && !redeemerHoldsFrt) {\n            owedToFrtHolder = signerFee;\n        }\n\n        // The TDT holder gets any leftover balance.\n        owedToTdtHolder = balance.add(owedToDeposit).sub(signerFee).sub(\n            owedToFrtHolder\n        );\n\n        return (owedToDeposit, owedToTdtHolder, owedToFrtHolder);\n    }\n\n    /// @notice                    Get the base TBTC amount needed to redeem.\n    /// @param _lotSize   The lot size to use for the base redemption charge.\n    /// @param _redeemerHoldsTdt   True if the redeemer is the TDT holder.\n    /// @return                    The amount in TBTC.\n    function calculateBaseRedemptionCharge(\n        uint256 _lotSize,\n        bool _redeemerHoldsTdt\n    ) internal pure returns (uint256) {\n        if (_redeemerHoldsTdt) {\n            return 0;\n        }\n        return _lotSize;\n    }\n\n    /// @notice  Get fees owed for redemption\n    /// @param signerFee The value of the signer fee for fee calculations.\n    /// @param _preTerm               True if the Deposit is at-term or in courtesy_call.\n    /// @param _frtExists     True if the FRT exists.\n    /// @param _redeemerHoldsTdt     True if the the redeemer holds the TDT.\n    /// @param _redeemerHoldsFrt     True if the redeemer holds the FRT.\n    /// @return                      The fees owed in TBTC.\n    function calculateRedemptionFeeEscrow(\n        uint256 signerFee,\n        bool _preTerm,\n        bool _frtExists,\n        bool _redeemerHoldsTdt,\n        bool _redeemerHoldsFrt\n    ) internal pure returns (uint256) {\n        // Escrow the fee rebate so the FRT holder can be repaids, unless the\n        // redeemer holds the FRT, in which case we simply don't require the\n        // rebate from them.\n        bool escrowRequiresFeeRebate =\n            _preTerm && _frtExists && !_redeemerHoldsFrt;\n\n        bool escrowRequiresFee =\n            _preTerm ||\n                // If the FRT exists at term/courtesy call, the fee is\n                // \"required\", but should already be escrowed before redemption.\n                _frtExists ||\n                // The TDT holder always owes fees if there is no FRT.\n                _redeemerHoldsTdt;\n\n        uint256 feeEscrow = 0;\n        if (escrowRequiresFee) {\n            feeEscrow += signerFee;\n        }\n        if (escrowRequiresFeeRebate) {\n            feeEscrow += signerFee;\n        }\n\n        return feeEscrow;\n    }\n}\n",
  "sourcePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
  "ast": {
    "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
    "exportedSymbols": {
      "DepositUtils": [
        5103
      ]
    },
    "id": 5104,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3780,
        "literals": [
          "solidity",
          "0.5",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
        "id": 3782,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 14208,
        "src": "25:80:7",
        "symbolAliases": [
          {
            "foreign": 3781,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
        "id": 3784,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 13217,
        "src": "106:74:7",
        "symbolAliases": [
          {
            "foreign": 3783,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
        "id": 3786,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 13433,
        "src": "181:74:7",
        "symbolAliases": [
          {
            "foreign": 3785,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
        "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
        "id": 3788,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 11429,
        "src": "256:99:7",
        "symbolAliases": [
          {
            "foreign": 3787,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
        "id": 3790,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 18288,
        "src": "356:87:7",
        "symbolAliases": [
          {
            "foreign": 3789,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 3792,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 16856,
        "src": "444:75:7",
        "symbolAliases": [
          {
            "foreign": 3791,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
        "file": "./DepositStates.sol",
        "id": 3794,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 3779,
        "src": "520:50:7",
        "symbolAliases": [
          {
            "foreign": 3793,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol",
        "file": "../system/TBTCConstants.sol",
        "id": 3796,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 6758,
        "src": "571:58:7",
        "symbolAliases": [
          {
            "foreign": 3795,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol",
        "file": "../interfaces/ITBTCSystem.sol",
        "id": 3798,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 5512,
        "src": "630:58:7",
        "symbolAliases": [
          {
            "foreign": 3797,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
        "file": "../system/TBTCToken.sol",
        "id": 3800,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 8562,
        "src": "689:50:7",
        "symbolAliases": [
          {
            "foreign": 3799,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
        "file": "../system/FeeRebateToken.sol",
        "id": 3802,
        "nodeType": "ImportDirective",
        "scope": 5104,
        "sourceUnit": 6301,
        "src": "740:60:7",
        "symbolAliases": [
          {
            "foreign": 3801,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5103,
        "linearizedBaseContracts": [
          5103
        ],
        "name": "DepositUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3805,
            "libraryName": {
              "contractScope": null,
              "id": 3803,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16855,
              "src": "835:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$16855",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "829:27:7",
            "typeName": {
              "id": 3804,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "848:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3808,
            "libraryName": {
              "contractScope": null,
              "id": 3806,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 16855,
              "src": "867:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$16855",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "861:26:7",
            "typeName": {
              "id": 3807,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "880:6:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "id": 3811,
            "libraryName": {
              "contractScope": null,
              "id": 3809,
              "name": "BytesLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13432,
              "src": "898:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesLib_$13432",
                "typeString": "library BytesLib"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "892:25:7",
            "typeName": {
              "id": 3810,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "911:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 3814,
            "libraryName": {
              "contractScope": null,
              "id": 3812,
              "name": "BTCUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13216,
              "src": "928:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BTCUtils_$13216",
                "typeString": "library BTCUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "922:25:7",
            "typeName": {
              "id": 3813,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "941:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 3817,
            "libraryName": {
              "contractScope": null,
              "id": 3815,
              "name": "BTCUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13216,
              "src": "958:8:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BTCUtils_$13216",
                "typeString": "library BTCUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "952:27:7",
            "typeName": {
              "id": 3816,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "971:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 3820,
            "libraryName": {
              "contractScope": null,
              "id": 3818,
              "name": "ValidateSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14207,
              "src": "990:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ValidateSPV_$14207",
                "typeString": "library ValidateSPV"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "984:28:7",
            "typeName": {
              "id": 3819,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1006:5:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 3823,
            "libraryName": {
              "contractScope": null,
              "id": 3821,
              "name": "ValidateSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14207,
              "src": "1023:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ValidateSPV_$14207",
                "typeString": "library ValidateSPV"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1017:30:7",
            "typeName": {
              "id": 3822,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1039:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            }
          },
          {
            "id": 3826,
            "libraryName": {
              "contractScope": null,
              "id": 3824,
              "name": "DepositStates",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3778,
              "src": "1058:13:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DepositStates_$3778",
                "typeString": "library DepositStates"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1052:45:7",
            "typeName": {
              "contractScope": null,
              "id": 3825,
              "name": "DepositUtils.Deposit",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3893,
              "src": "1076:20:7",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                "typeString": "struct DepositUtils.Deposit"
              }
            }
          },
          {
            "canonicalName": "DepositUtils.Deposit",
            "id": 3893,
            "members": [
              {
                "constant": false,
                "id": 3828,
                "name": "tbtcSystem",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1163:22:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                  "typeString": "contract ITBTCSystem"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3827,
                  "name": "ITBTCSystem",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 5511,
                  "src": "1163:11:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                    "typeString": "contract ITBTCSystem"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3830,
                "name": "tbtcToken",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1195:19:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_TBTCToken_$8561",
                  "typeString": "contract TBTCToken"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3829,
                  "name": "TBTCToken",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 8561,
                  "src": "1195:9:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TBTCToken_$8561",
                    "typeString": "contract TBTCToken"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3832,
                "name": "tbtcDepositToken",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1224:24:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC721_$18287",
                  "typeString": "contract IERC721"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3831,
                  "name": "IERC721",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 18287,
                  "src": "1224:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC721_$18287",
                    "typeString": "contract IERC721"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3834,
                "name": "feeRebateToken",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1258:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                  "typeString": "contract FeeRebateToken"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 3833,
                  "name": "FeeRebateToken",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 6300,
                  "src": "1258:14:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                    "typeString": "contract FeeRebateToken"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3836,
                "name": "vendingMachineAddress",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1297:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3835,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1297:7:7",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3838,
                "name": "lotSizeSatoshis",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1336:22:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 3837,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1336:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3840,
                "name": "currentState",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1368:18:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 3839,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "1368:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3842,
                "name": "signerFeeDivisor",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1396:23:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 3841,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1396:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3844,
                "name": "initialCollateralizedPercent",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1429:35:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 3843,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1429:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3846,
                "name": "undercollateralizedThresholdPercent",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1474:42:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 3845,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1474:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3848,
                "name": "severelyUndercollateralizedThresholdPercent",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1526:50:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                },
                "typeName": {
                  "id": 3847,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1526:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3850,
                "name": "keepSetupFee",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1586:20:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3849,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1586:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3852,
                "name": "liquidationInitiated",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1640:28:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3851,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1640:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3854,
                "name": "courtesyCallInitiated",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1718:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3853,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1718:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3856,
                "name": "liquidationInitiator",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1793:36:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                },
                "typeName": {
                  "id": 3855,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1793:15:7",
                  "stateMutability": "payable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3858,
                "name": "keepAddress",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1881:19:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 3857,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1881:7:7",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3860,
                "name": "signingGroupRequestedAt",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "1946:31:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3859,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1946:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3862,
                "name": "fundingProofTimerStart",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2070:30:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3861,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2070:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3864,
                "name": "signingGroupPubkeyX",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2186:27:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 3863,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2186:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3866,
                "name": "signingGroupPubkeyY",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2273:27:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 3865,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2273:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3868,
                "name": "redeemerAddress",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2408:31:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address_payable",
                  "typeString": "address payable"
                },
                "typeName": {
                  "id": 3867,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2408:15:7",
                  "stateMutability": "payable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3870,
                "name": "redeemerOutputScript",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2517:26:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 3869,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "2517:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3872,
                "name": "initialRedemptionFee",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2583:28:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3871,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2583:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3874,
                "name": "latestRedemptionFee",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2653:27:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3873,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2653:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3876,
                "name": "withdrawalRequestTime",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2748:29:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3875,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2748:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3878,
                "name": "lastRequestedDigest",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2835:27:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 3877,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2835:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3880,
                "name": "utxoValueBytes",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "2960:21:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes8",
                  "typeString": "bytes8"
                },
                "typeName": {
                  "id": 3879,
                  "name": "bytes8",
                  "nodeType": "ElementaryTypeName",
                  "src": "2960:6:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3882,
                "name": "fundedAt",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "3044:16:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3881,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3044:7:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3884,
                "name": "utxoOutpoint",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "3115:18:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 3883,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "3115:5:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3888,
                "name": "withdrawableAmounts",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "3285:47:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 3887,
                  "keyType": {
                    "id": 3885,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3293:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3285:27:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 3886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3304:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3892,
                "name": "approvedDigests",
                "nodeType": "VariableDeclaration",
                "scope": 3893,
                "src": "3441:43:7",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                  "typeString": "mapping(bytes32 => uint256)"
                },
                "typeName": {
                  "id": 3891,
                  "keyType": {
                    "id": 3889,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3449:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "3441:27:7",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                    "typeString": "mapping(bytes32 => uint256)"
                  },
                  "valueType": {
                    "id": 3890,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3460:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Deposit",
            "nodeType": "StructDefinition",
            "scope": 5103,
            "src": "1103:2388:7",
            "visibility": "public"
          },
          {
            "body": {
              "id": 3910,
              "nodeType": "Block",
              "src": "3722:101:7",
              "statements": [
                {
                  "assignments": [
                    3899
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3899,
                      "name": "_keep",
                      "nodeType": "VariableDeclaration",
                      "scope": 3910,
                      "src": "3732:22:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                        "typeString": "contract IBondedECDSAKeep"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3898,
                        "name": "IBondedECDSAKeep",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11428,
                        "src": "3732:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3904,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3901,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3895,
                          "src": "3774:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 3902,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keepAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3858,
                        "src": "3774:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3900,
                      "name": "IBondedECDSAKeep",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11428,
                      "src": "3757:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                        "typeString": "type(contract IBondedECDSAKeep)"
                      }
                    },
                    "id": 3903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3757:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                      "typeString": "contract IBondedECDSAKeep"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3732:57:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3905,
                        "name": "_keep",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3899,
                        "src": "3799:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "id": 3907,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "closeKeep",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11427,
                      "src": "3799:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 3908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3799:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3909,
                  "nodeType": "ExpressionStatement",
                  "src": "3799:17:7"
                }
              ]
            },
            "documentation": "@notice Closes keep associated with the deposit.\n @dev Should be called when the keep is no longer needed and the signing\n group can disband.",
            "id": 3911,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "closeKeep",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3895,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3911,
                  "src": "3680:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3894,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "3680:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3679:33:7"
            },
            "returnParameters": {
              "id": 3897,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3722:0:7"
            },
            "scope": 5103,
            "src": "3661:162:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3923,
              "nodeType": "Block",
              "src": "4123:67:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3918,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3913,
                          "src": "4140:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 3919,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcSystem",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3828,
                        "src": "4140:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                          "typeString": "contract ITBTCSystem"
                        }
                      },
                      "id": 3920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fetchRelayCurrentDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5459,
                      "src": "4140:41:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 3921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4140:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3917,
                  "id": 3922,
                  "nodeType": "Return",
                  "src": "4133:50:7"
                }
              ]
            },
            "documentation": "@notice         Gets the current block difficulty.\n @dev            Calls the light relay and gets the current block difficulty.\n @return         The difficulty.",
            "id": 3924,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentBlockDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3913,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3924,
                  "src": "4045:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3912,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "4045:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4044:20:7"
            },
            "returnParameters": {
              "id": 3917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3916,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3924,
                  "src": "4110:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3915,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4110:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4109:9:7"
            },
            "scope": 5103,
            "src": "4013:177:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3936,
              "nodeType": "Block",
              "src": "4493:68:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3931,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3926,
                          "src": "4510:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 3932,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcSystem",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3828,
                        "src": "4510:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                          "typeString": "contract ITBTCSystem"
                        }
                      },
                      "id": 3933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fetchRelayPreviousDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5464,
                      "src": "4510:42:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 3934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4510:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 3930,
                  "id": 3935,
                  "nodeType": "Return",
                  "src": "4503:51:7"
                }
              ]
            },
            "documentation": "@notice         Gets the previous block difficulty.\n @dev            Calls the light relay and gets the previous block difficulty.\n @return         The difficulty.",
            "id": 3937,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "previousBlockDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3927,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3926,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 3937,
                  "src": "4415:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3925,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "4415:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4414:20:7"
            },
            "returnParameters": {
              "id": 3930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3929,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3937,
                  "src": "4480:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3928,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4479:9:7"
            },
            "scope": 5103,
            "src": "4382:179:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4035,
              "nodeType": "Block",
              "src": "4993:1165:7",
              "statements": [
                {
                  "assignments": [
                    3945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3945,
                      "name": "_reqDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 4035,
                      "src": "5003:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3944,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5003:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3946,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5003:16:7"
                },
                {
                  "assignments": [
                    3948
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3948,
                      "name": "_current",
                      "nodeType": "VariableDeclaration",
                      "scope": 4035,
                      "src": "5029:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3947,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5029:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3952,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3950,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3939,
                        "src": "5071:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 3949,
                      "name": "currentBlockDifficulty",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3924,
                      "src": "5048:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 3951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5048:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5029:45:7"
                },
                {
                  "assignments": [
                    3954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3954,
                      "name": "_previous",
                      "nodeType": "VariableDeclaration",
                      "scope": 4035,
                      "src": "5084:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5084:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3958,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3956,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3939,
                        "src": "5128:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 3955,
                      "name": "previousBlockDifficulty",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3937,
                      "src": "5104:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 3957,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5104:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5084:47:7"
                },
                {
                  "assignments": [
                    3960
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3960,
                      "name": "_firstHeaderDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 4035,
                      "src": "5141:24:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3959,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5141:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3966,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3961,
                            "name": "_bitcoinHeaders",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3941,
                            "src": "5180:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 3962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "extractTarget",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12925,
                          "src": "5180:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (uint256)"
                          }
                        },
                        "id": 3963,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5180:31:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateDifficulty",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12938,
                      "src": "5180:51:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 3965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5180:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5141:92:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3967,
                      "name": "_firstHeaderDiff",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3960,
                      "src": "5248:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3968,
                      "name": "_current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3948,
                      "src": "5268:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5248:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3975,
                        "name": "_firstHeaderDiff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3960,
                        "src": "5332:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3976,
                        "name": "_previous",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3954,
                        "src": "5352:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5332:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 3987,
                      "nodeType": "Block",
                      "src": "5414:72:7",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6e6f742061742063757272656e74206f722070726576696f757320646966666963756c7479",
                                "id": 3984,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5435:39:7",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_7f8430f268054c270db183e54701a22d56a96d3e1e4978e46b2827d6335275a6",
                                  "typeString": "literal_string \"not at current or previous difficulty\""
                                },
                                "value": "not at current or previous difficulty"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_7f8430f268054c270db183e54701a22d56a96d3e1e4978e46b2827d6335275a6",
                                  "typeString": "literal_string \"not at current or previous difficulty\""
                                }
                              ],
                              "id": 3983,
                              "name": "revert",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                18365,
                                18366
                              ],
                              "referencedDeclaration": 18366,
                              "src": "5428:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (string memory) pure"
                              }
                            },
                            "id": 3985,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5428:47:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 3986,
                          "nodeType": "ExpressionStatement",
                          "src": "5428:47:7"
                        }
                      ]
                    },
                    "id": 3988,
                    "nodeType": "IfStatement",
                    "src": "5328:158:7",
                    "trueBody": {
                      "id": 3982,
                      "nodeType": "Block",
                      "src": "5363:45:7",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 3980,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 3978,
                              "name": "_reqDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3945,
                              "src": "5377:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "id": 3979,
                              "name": "_previous",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3954,
                              "src": "5388:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5377:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3981,
                          "nodeType": "ExpressionStatement",
                          "src": "5377:20:7"
                        }
                      ]
                    }
                  },
                  "id": 3989,
                  "nodeType": "IfStatement",
                  "src": "5244:242:7",
                  "trueBody": {
                    "id": 3974,
                    "nodeType": "Block",
                    "src": "5278:44:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3970,
                            "name": "_reqDiff",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3945,
                            "src": "5292:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3971,
                            "name": "_current",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3948,
                            "src": "5303:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5292:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3973,
                        "nodeType": "ExpressionStatement",
                        "src": "5292:19:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3991
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3991,
                      "name": "_observedDiff",
                      "nodeType": "VariableDeclaration",
                      "scope": 4035,
                      "src": "5496:21:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3990,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5496:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3995,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3992,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3941,
                        "src": "5520:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "validateHeaderChain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14148,
                      "src": "5520:35:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (uint256)"
                      }
                    },
                    "id": 3994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5520:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5496:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3997,
                          "name": "_observedDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3991,
                          "src": "5589:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3998,
                              "name": "ValidateSPV",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14207,
                              "src": "5606:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ValidateSPV_$14207_$",
                                "typeString": "type(library ValidateSPV)"
                              }
                            },
                            "id": 3999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getErrBadLength",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13971,
                            "src": "5606:27:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 4000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5606:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5589:46:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206c656e677468206f6620746865206865616465727320636861696e",
                        "id": 4002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5649:37:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_92a0405652d516383f1545f4343c46ea0a68cf55d9e795cb647f2b3320f6ea40",
                          "typeString": "literal_string \"Invalid length of the headers chain\""
                        },
                        "value": "Invalid length of the headers chain"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_92a0405652d516383f1545f4343c46ea0a68cf55d9e795cb647f2b3320f6ea40",
                          "typeString": "literal_string \"Invalid length of the headers chain\""
                        }
                      ],
                      "id": 3996,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "5568:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5568:128:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4004,
                  "nodeType": "ExpressionStatement",
                  "src": "5568:128:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4006,
                          "name": "_observedDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3991,
                          "src": "5727:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4007,
                              "name": "ValidateSPV",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14207,
                              "src": "5744:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ValidateSPV_$14207_$",
                                "typeString": "type(library ValidateSPV)"
                              }
                            },
                            "id": 4008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getErrInvalidChain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13979,
                            "src": "5744:30:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 4009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5744:32:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5727:49:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e76616c6964206865616465727320636861696e",
                        "id": 4011,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5790:23:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2c2dfd181269a4c1ce4f235dbe6726e9e20ead12388274c8b22fe08e78db7336",
                          "typeString": "literal_string \"Invalid headers chain\""
                        },
                        "value": "Invalid headers chain"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2c2dfd181269a4c1ce4f235dbe6726e9e20ead12388274c8b22fe08e78db7336",
                          "typeString": "literal_string \"Invalid headers chain\""
                        }
                      ],
                      "id": 4005,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "5706:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5706:117:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4013,
                  "nodeType": "ExpressionStatement",
                  "src": "5706:117:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4019,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4015,
                          "name": "_observedDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3991,
                          "src": "5854:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4016,
                              "name": "ValidateSPV",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14207,
                              "src": "5871:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ValidateSPV_$14207_$",
                                "typeString": "type(library ValidateSPV)"
                              }
                            },
                            "id": 4017,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getErrLowWork",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13987,
                            "src": "5871:25:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 4018,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5871:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5854:44:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e73756666696369656e7420776f726b20696e206120686561646572",
                        "id": 4020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5912:31:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6765317ac58a0bde6edd9b0a77da031b1983fd67bbdbda13051ed89ff1a508c9",
                          "typeString": "literal_string \"Insufficient work in a header\""
                        },
                        "value": "Insufficient work in a header"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6765317ac58a0bde6edd9b0a77da031b1983fd67bbdbda13051ed89ff1a508c9",
                          "typeString": "literal_string \"Insufficient work in a header\""
                        }
                      ],
                      "id": 4014,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "5833:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5833:120:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4022,
                  "nodeType": "ExpressionStatement",
                  "src": "5833:120:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4024,
                          "name": "_observedDiff",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3991,
                          "src": "5985:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4027,
                                  "name": "TBTCConstants",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6757,
                                  "src": "6031:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                                    "typeString": "type(library TBTCConstants)"
                                  }
                                },
                                "id": 4028,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getTxProofDifficultyFactor",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6684,
                                "src": "6031:40:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                                  "typeString": "function () pure returns (uint256)"
                                }
                              },
                              "id": 4029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6031:42:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4025,
                              "name": "_reqDiff",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3945,
                              "src": "6018:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16808,
                            "src": "6018:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6018:56:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5985:89:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e73756666696369656e7420616363756d756c6174656420646966666963756c747920696e2068656164657220636861696e",
                        "id": 4032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6088:53:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_783c1ec375fff1301ad34ffc02be448b47c08a18ace7140b3cc0f461b18129c2",
                          "typeString": "literal_string \"Insufficient accumulated difficulty in header chain\""
                        },
                        "value": "Insufficient accumulated difficulty in header chain"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_783c1ec375fff1301ad34ffc02be448b47c08a18ace7140b3cc0f461b18129c2",
                          "typeString": "literal_string \"Insufficient accumulated difficulty in header chain\""
                        }
                      ],
                      "id": 4023,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "5964:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5964:187:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4034,
                  "nodeType": "ExpressionStatement",
                  "src": "5964:187:7"
                }
              ]
            },
            "documentation": "@notice                     Evaluates the header difficulties in a proof.\n @dev                        Uses the light oracle to source recent difficulty.\n @param  _bitcoinHeaders     The header chain to evaluate.\n @return                     True if acceptable, otherwise revert.",
            "id": 4036,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "evaluateProofDifficulty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3942,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3939,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4036,
                  "src": "4918:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3938,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "4918:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3941,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 4036,
                  "src": "4946:28:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3940,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4946:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4908:72:7"
            },
            "returnParameters": {
              "id": 3943,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4993:0:7"
            },
            "scope": 5103,
            "src": "4876:1282:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4068,
              "nodeType": "Block",
              "src": "7033:330:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4052,
                                    "name": "_bitcoinHeaders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4046,
                                    "src": "7093:15:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 4053,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "extractMerkleRootLE",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12880,
                                  "src": "7093:35:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                    "typeString": "function (bytes memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 4054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7093:37:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 4055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toBytes32",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13400,
                              "src": "7093:47:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4056,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7093:49:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4057,
                            "name": "_merkleProof",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4042,
                            "src": "7160:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4058,
                            "name": "_txIndexInBlock",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4044,
                            "src": "7190:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4050,
                            "name": "_txId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4040,
                            "src": "7064:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4051,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "prove",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14031,
                          "src": "7064:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes32_$",
                            "typeString": "function (bytes32,bytes32,bytes memory,uint256) pure returns (bool)"
                          }
                        },
                        "id": 4059,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7064:155:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f722070726f76696465642068656164657220616e642074784964",
                        "id": 4060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7233:59:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fa0f14e2ad906f9659e2f553b0115063768d6742a6e662f2ff5474f48e8b2911",
                          "typeString": "literal_string \"Tx merkle proof is not valid for provided header and txId\""
                        },
                        "value": "Tx merkle proof is not valid for provided header and txId"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fa0f14e2ad906f9659e2f553b0115063768d6742a6e662f2ff5474f48e8b2911",
                          "typeString": "literal_string \"Tx merkle proof is not valid for provided header and txId\""
                        }
                      ],
                      "id": 4049,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "7043:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7043:259:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4062,
                  "nodeType": "ExpressionStatement",
                  "src": "7043:259:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4064,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4038,
                        "src": "7336:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4065,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4046,
                        "src": "7340:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4063,
                      "name": "evaluateProofDifficulty",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4036,
                      "src": "7312:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory) view"
                      }
                    },
                    "id": 4066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7312:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4067,
                  "nodeType": "ExpressionStatement",
                  "src": "7312:44:7"
                }
              ]
            },
            "documentation": "@notice                 Syntactically check an SPV proof for a bitcoin transaction with its hash (ID).\n @dev                    Stateless SPV Proof verification documented elsewhere (see https://github.com/summa-tx/bitcoin-spv).\n @param _d               Deposit storage pointer.\n @param _txId            The bitcoin txid of the tx that is purportedly included in the header chain.\n @param _merkleProof     The merkle proof of inclusion of the tx in the bitcoin block.\n @param _txIndexInBlock  The index of the tx in the Bitcoin block (0-indexed).\n @param _bitcoinHeaders  An array of tightly-packed bitcoin headers.",
            "id": 4069,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "checkProofFromTxId",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4047,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4038,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4069,
                  "src": "6867:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4037,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "6867:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4040,
                  "name": "_txId",
                  "nodeType": "VariableDeclaration",
                  "scope": 4069,
                  "src": "6895:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4039,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6895:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4042,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 4069,
                  "src": "6918:25:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4041,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6918:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4044,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 4069,
                  "src": "6953:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4043,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6953:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4046,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 4069,
                  "src": "6986:28:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4045,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6986:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6857:163:7"
            },
            "returnParameters": {
              "id": 4048,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7033:0:7"
            },
            "scope": 5103,
            "src": "6830:533:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4149,
              "nodeType": "Block",
              "src": "8224:777:7",
              "statements": [
                {
                  "assignments": [
                    4081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4081,
                      "name": "_valueBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 4149,
                      "src": "8234:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4080,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "8234:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4082,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8234:18:7"
                },
                {
                  "assignments": [
                    4084
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4084,
                      "name": "_output",
                      "nodeType": "VariableDeclaration",
                      "scope": 4149,
                      "src": "8262:20:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4083,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "8262:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4085,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8262:20:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4086,
                      "name": "_output",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4084,
                      "src": "8342:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4089,
                          "name": "_fundingOutputIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4075,
                          "src": "8389:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4087,
                          "name": "_txOutputVector",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4073,
                          "src": "8352:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 4088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "extractOutputAtIndex",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 12456,
                        "src": "8352:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,uint256) pure returns (bytes memory)"
                        }
                      },
                      "id": 4090,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8352:57:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "8342:67:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 4092,
                  "nodeType": "ExpressionStatement",
                  "src": "8342:67:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 4107,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4095,
                                  "name": "_output",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4084,
                                  "src": "8451:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 4096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "extractHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 12682,
                                "src": "8451:19:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory) pure returns (bytes memory)"
                                }
                              },
                              "id": 4097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8451:21:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4094,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "8441:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8441:32:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4103,
                                      "name": "_d",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4071,
                                      "src": "8530:2:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                        "typeString": "struct DepositUtils.Deposit storage pointer"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                        "typeString": "struct DepositUtils.Deposit storage pointer"
                                      }
                                    ],
                                    "id": 4102,
                                    "name": "signerPKH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4458,
                                    "src": "8520:9:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes20_$",
                                      "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                                    }
                                  },
                                  "id": 4104,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8520:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4100,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18347,
                                  "src": "8503:3:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4101,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "8503:16:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4105,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8503:31:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4099,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18354,
                            "src": "8493:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8493:42:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "8441:94:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f756c64206e6f74206964656e74696679206f75747075742066756e64696e6720746865207265717569726564207075626c6963206b65792068617368",
                        "id": 4108,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8549:64:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ce299c5aff9573702998bb1a5d486c01e568cca589b4d6d69f8b5015ae45b327",
                          "typeString": "literal_string \"Could not identify output funding the required public key hash\""
                        },
                        "value": "Could not identify output funding the required public key hash"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ce299c5aff9573702998bb1a5d486c01e568cca589b4d6d69f8b5015ae45b327",
                          "typeString": "literal_string \"Could not identify output funding the required public key hash\""
                        }
                      ],
                      "id": 4093,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "8420:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8420:203:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4110,
                  "nodeType": "ExpressionStatement",
                  "src": "8420:203:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4115,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4112,
                              "name": "_output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4084,
                              "src": "8654:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 4113,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "8654:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3331",
                            "id": 4114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8672:2:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_31_by_1",
                              "typeString": "int_const 31"
                            },
                            "value": "31"
                          },
                          "src": "8654:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "38",
                                "id": 4118,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8717:1:7",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "3233",
                                "id": 4119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8720:2:7",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_23_by_1",
                                  "typeString": "int_const 23"
                                },
                                "value": "23"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                {
                                  "typeIdentifier": "t_rational_23_by_1",
                                  "typeString": "int_const 23"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4116,
                                "name": "_output",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4084,
                                "src": "8694:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 4117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "keccak256Slice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 13431,
                              "src": "8694:22:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                              }
                            },
                            "id": 4120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8694:29:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "160014",
                                    "id": 4124,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8770:11:7",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                                      "typeString": "literal_string \"\u0016\u0000\u0014\""
                                    },
                                    "value": "\u0016\u0000\u0014"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4126,
                                        "name": "_d",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4071,
                                        "src": "8793:2:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                          "typeString": "struct DepositUtils.Deposit storage pointer"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                          "typeString": "struct DepositUtils.Deposit storage pointer"
                                        }
                                      ],
                                      "id": 4125,
                                      "name": "signerPKH",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4458,
                                      "src": "8783:9:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bytes20_$",
                                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)"
                                      }
                                    },
                                    "id": 4127,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8783:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                                      "typeString": "literal_string \"\u0016\u0000\u0014\""
                                    },
                                    {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4122,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18347,
                                    "src": "8753:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 4123,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "8753:16:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 4128,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8753:44:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4121,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18354,
                              "src": "8743:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8743:55:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8694:104:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8654:144:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46756e64696e67207472616e73616374696f6e206f7574707574207479706520756e737570706f727465643a206f6e6c7920703277706b68206f7574707574732061726520737570706f72746564",
                        "id": 4132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8812:80:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4820ad1149d759871ed9ed9bb7eb6d4967f0182469b44cf4300cddfd9c3e83ea",
                          "typeString": "literal_string \"Funding transaction output type unsupported: only p2wpkh outputs are supported\""
                        },
                        "value": "Funding transaction output type unsupported: only p2wpkh outputs are supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4820ad1149d759871ed9ed9bb7eb6d4967f0182469b44cf4300cddfd9c3e83ea",
                          "typeString": "literal_string \"Funding transaction output type unsupported: only p2wpkh outputs are supported\""
                        }
                      ],
                      "id": 4111,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "8633:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8633:269:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4134,
                  "nodeType": "ExpressionStatement",
                  "src": "8633:269:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4135,
                      "name": "_valueBytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4081,
                      "src": "8913:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4139,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8948:1:7",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "38",
                                  "id": 4140,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8951:1:7",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4137,
                                  "name": "_output",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4084,
                                  "src": "8934:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 4138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "slice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 13281,
                                "src": "8934:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                }
                              },
                              "id": 4141,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8934:19:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 4142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toBytes32",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13400,
                            "src": "8934:29:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) pure returns (bytes32)"
                            }
                          },
                          "id": 4143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8934:31:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 4136,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8927:6:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes8_$",
                          "typeString": "type(bytes8)"
                        },
                        "typeName": "bytes8"
                      },
                      "id": 4144,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8927:39:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "src": "8913:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "id": 4146,
                  "nodeType": "ExpressionStatement",
                  "src": "8913:53:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4147,
                    "name": "_valueBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4081,
                    "src": "8983:11:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "functionReturnParameters": 4079,
                  "id": 4148,
                  "nodeType": "Return",
                  "src": "8976:18:7"
                }
              ]
            },
            "documentation": "@notice                     Find and validate funding output in transaction output vector using the index.\n @dev                        Gets `_fundingOutputIndex` output from the output vector and validates if it is\n                             a p2wpkh output with public key hash matching this deposit's public key hash.\n @param _d                   Deposit storage pointer.\n @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC outputs.\n @param _fundingOutputIndex  Index of funding output in _txOutputVector.\n @return                     Funding value.",
            "id": 4150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "findAndParseFundingOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4071,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4150,
                  "src": "8084:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4070,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "8084:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4073,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 4150,
                  "src": "8125:28:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4072,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8125:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4075,
                  "name": "_fundingOutputIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4150,
                  "src": "8163:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4074,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8163:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8074:120:7"
            },
            "returnParameters": {
              "id": 4079,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4078,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4150,
                  "src": "8216:6:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 4077,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8216:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8215:8:7"
            },
            "scope": 5103,
            "src": "8040:961:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4236,
              "nodeType": "Block",
              "src": "10583:1250:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4176,
                            "name": "_txInputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4156,
                            "src": "10658:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4177,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12774,
                          "src": "10658:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 4178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10658:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c696420696e70757420766563746f722070726f7669646564",
                        "id": 4179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10688:31:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                          "typeString": "literal_string \"invalid input vector provided\""
                        },
                        "value": "invalid input vector provided"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                          "typeString": "literal_string \"invalid input vector provided\""
                        }
                      ],
                      "id": 4175,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "10650:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10650:70:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4181,
                  "nodeType": "ExpressionStatement",
                  "src": "10650:70:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4183,
                            "name": "_txOutputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4158,
                            "src": "10751:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "validateVout",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 12866,
                          "src": "10751:28:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bool)"
                          }
                        },
                        "id": 4185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10751:30:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206f757470757420766563746f722070726f7669646564",
                        "id": 4186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10795:32:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                          "typeString": "literal_string \"invalid output vector provided\""
                        },
                        "value": "invalid output vector provided"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                          "typeString": "literal_string \"invalid output vector provided\""
                        }
                      ],
                      "id": 4182,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "10730:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4187,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10730:107:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4188,
                  "nodeType": "ExpressionStatement",
                  "src": "10730:107:7"
                },
                {
                  "assignments": [
                    4190
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4190,
                      "name": "txID",
                      "nodeType": "VariableDeclaration",
                      "scope": 4236,
                      "src": "10848:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4189,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10848:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4200,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4193,
                            "name": "_txVersion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4154,
                            "src": "10926:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4194,
                            "name": "_txInputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4156,
                            "src": "10954:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4195,
                            "name": "_txOutputVector",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4158,
                            "src": "10986:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4196,
                            "name": "_txLocktime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4160,
                            "src": "11019:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4191,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18347,
                            "src": "10875:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 4192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10875:33:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 4197,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10875:169:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11851,
                      "src": "10875:194:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 4199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10875:196:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10848:223:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4201,
                      "name": "_valueBytes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4171,
                      "src": "11082:11:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4203,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4152,
                          "src": "11135:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4204,
                          "name": "_txOutputVector",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4158,
                          "src": "11151:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4205,
                          "name": "_fundingOutputIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4162,
                          "src": "11180:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "id": 4202,
                        "name": "findAndParseFundingOutput",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4150,
                        "src": "11096:25:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes_memory_ptr_$_t_uint8_$returns$_t_bytes8_$",
                          "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes memory,uint8) view returns (bytes8)"
                        }
                      },
                      "id": 4206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11096:113:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "src": "11082:127:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "id": 4208,
                  "nodeType": "ExpressionStatement",
                  "src": "11082:127:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4211,
                              "name": "_valueBytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4171,
                              "src": "11256:11:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            ],
                            "id": 4210,
                            "name": "bytes8LEToUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4520,
                            "src": "11241:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes8_$returns$_t_uint256_$",
                              "typeString": "function (bytes8) pure returns (uint256)"
                            }
                          },
                          "id": 4212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11241:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4213,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4152,
                            "src": "11272:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 4214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "lotSizeSatoshis",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3838,
                          "src": "11272:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "11241:49:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4465706f73697420746f6f20736d616c6c",
                        "id": 4216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11304:19:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e47e4d4019fbc3201dd7924d57a3f1daa90e6a7f83fef433220dabdb84cceb65",
                          "typeString": "literal_string \"Deposit too small\""
                        },
                        "value": "Deposit too small"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e47e4d4019fbc3201dd7924d57a3f1daa90e6a7f83fef433220dabdb84cceb65",
                          "typeString": "literal_string \"Deposit too small\""
                        }
                      ],
                      "id": 4209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11220:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11220:113:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4218,
                  "nodeType": "ExpressionStatement",
                  "src": "11220:113:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4220,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4152,
                        "src": "11376:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4221,
                        "name": "txID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4190,
                        "src": "11392:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4222,
                        "name": "_merkleProof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4164,
                        "src": "11410:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4223,
                        "name": "_txIndexInBlock",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4166,
                        "src": "11436:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4224,
                        "name": "_bitcoinHeaders",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4168,
                        "src": "11465:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 4219,
                      "name": "checkProofFromTxId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4069,
                      "src": "11344:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes memory,uint256,bytes memory) view"
                      }
                    },
                    "id": 4225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11344:146:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4226,
                  "nodeType": "ExpressionStatement",
                  "src": "11344:146:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4227,
                      "name": "_utxoOutpoint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4173,
                      "src": "11708:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4230,
                          "name": "txID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4190,
                          "src": "11754:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4231,
                          "name": "_fundingOutputIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4162,
                          "src": "11772:19:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "000000",
                          "id": 4232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11805:11:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_99ff0d9125e1fc9531a11262e15aeb2c60509a078c4cc4c64cefdfb06ff68647",
                            "typeString": "literal_string \"\u0000\u0000\u0000\""
                          },
                          "value": "\u0000\u0000\u0000"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_99ff0d9125e1fc9531a11262e15aeb2c60509a078c4cc4c64cefdfb06ff68647",
                            "typeString": "literal_string \"\u0000\u0000\u0000\""
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4228,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18347,
                          "src": "11724:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 4229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "encodePacked",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "11724:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function () pure returns (bytes memory)"
                        }
                      },
                      "id": 4233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11724:102:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "11708:118:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 4235,
                  "nodeType": "ExpressionStatement",
                  "src": "11708:118:7"
                }
              ]
            },
            "documentation": "@notice                     Validates the funding tx and parses information from it.\n @dev                        Takes a pre-parsed transaction and calculates values needed to verify funding.\n @param  _d                  Deposit storage pointer.\n @param _txVersion           Transaction version number (4-byte LE).\n @param _txInputVector       All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime          Final 4 bytes of the transaction.\n @param _fundingOutputIndex  Index of funding output in _txOutputVector (0-indexed).\n @param _merkleProof         The merkle proof of transaction inclusion in a block.\n @param _txIndexInBlock      Transaction index in the block (0-indexed).\n @param _bitcoinHeaders      Single bytestring of 80-byte bitcoin headers, lowest height first.\n @return                     The 8-byte LE UTXO size in satoshi, the 36byte outpoint.",
            "id": 4237,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "validateAndParseFundingSPVProof",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4169,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4152,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10205:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4151,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "10205:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4154,
                  "name": "_txVersion",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10246:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4153,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "10246:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4156,
                  "name": "_txInputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10273:27:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4155,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10273:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4158,
                  "name": "_txOutputVector",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10310:28:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4157,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10310:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4160,
                  "name": "_txLocktime",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10348:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 4159,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "10348:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4162,
                  "name": "_fundingOutputIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10376:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4161,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10376:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4164,
                  "name": "_merkleProof",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10411:25:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4163,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10411:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4166,
                  "name": "_txIndexInBlock",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10446:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10446:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4168,
                  "name": "_bitcoinHeaders",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10479:28:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4167,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10479:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10195:318:7"
            },
            "returnParameters": {
              "id": 4174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4171,
                  "name": "_valueBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10535:18:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 4170,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10535:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4173,
                  "name": "_utxoOutpoint",
                  "nodeType": "VariableDeclaration",
                  "scope": 4237,
                  "src": "10555:26:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4172,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10555:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10534:48:7"
            },
            "scope": 5103,
            "src": "10155:1678:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4268,
              "nodeType": "Block",
              "src": "12206:206:7",
              "statements": [
                {
                  "assignments": [
                    4245
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4245,
                      "name": "endOfTerm",
                      "nodeType": "VariableDeclaration",
                      "scope": 4268,
                      "src": "12216:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4244,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12216:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4253,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4249,
                            "name": "TBTCConstants",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6757,
                            "src": "12252:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                              "typeString": "type(library TBTCConstants)"
                            }
                          },
                          "id": 4250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getDepositTerm",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6676,
                          "src": "12252:28:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                            "typeString": "function () pure returns (uint256)"
                          }
                        },
                        "id": 4251,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12252:30:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4246,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4239,
                          "src": "12236:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4247,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "fundedAt",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3882,
                        "src": "12236:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4248,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16749,
                      "src": "12236:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12236:47:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12216:67:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4254,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18350,
                        "src": "12297:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 4255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "12297:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4256,
                      "name": "endOfTerm",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4245,
                      "src": "12315:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12297:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4265,
                  "nodeType": "IfStatement",
                  "src": "12293:95:7",
                  "trueBody": {
                    "id": 4264,
                    "nodeType": "Block",
                    "src": "12326:62:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4260,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18350,
                                "src": "12361:5:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 4261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "12361:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4258,
                              "name": "endOfTerm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4245,
                              "src": "12347:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4259,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16774,
                            "src": "12347:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12347:30:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4243,
                        "id": 4263,
                        "nodeType": "Return",
                        "src": "12340:37:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4266,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12404:1:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "functionReturnParameters": 4243,
                  "id": 4267,
                  "nodeType": "Return",
                  "src": "12397:8:7"
                }
              ]
            },
            "documentation": "@notice Retreive the remaining term of the deposit\n @dev    The return value is not guaranteed since block.timestmap can be lightly manipulated by miners.\n @return The remaining term of the deposit in seconds. 0 if already at term",
            "id": 4269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "remainingTerm",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4240,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4239,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "12115:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4238,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "12115:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12114:33:7"
            },
            "returnParameters": {
              "id": 4243,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4242,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "12193:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4241,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12193:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12192:9:7"
            },
            "scope": 5103,
            "src": "12092:320:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4339,
              "nodeType": "Block",
              "src": "12794:653:7",
              "statements": [
                {
                  "assignments": [
                    4277
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4277,
                      "name": "_elapsed",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "12804:16:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4276,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12804:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4284,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4281,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4271,
                          "src": "12843:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4282,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "liquidationInitiated",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3852,
                        "src": "12843:23:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4278,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18350,
                          "src": "12823:5:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 4279,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "12823:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16774,
                      "src": "12823:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12823:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12804:63:7"
                },
                {
                  "assignments": [
                    4286
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4286,
                      "name": "_available",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "12877:18:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4285,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12877:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4291,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4288,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18430,
                          "src": "12906:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        ],
                        "id": 4287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "12898:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12898:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "12898:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12877:42:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4292,
                      "name": "_elapsed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4277,
                      "src": "12933:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4293,
                          "name": "TBTCConstants",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6757,
                          "src": "12944:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                            "typeString": "type(library TBTCConstants)"
                          }
                        },
                        "id": 4294,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAuctionDuration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6756,
                        "src": "12944:32:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                          "typeString": "function () pure returns (uint256)"
                        }
                      },
                      "id": 4295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12944:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12933:45:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4300,
                  "nodeType": "IfStatement",
                  "src": "12929:93:7",
                  "trueBody": {
                    "id": 4299,
                    "nodeType": "Block",
                    "src": "12980:42:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4297,
                          "name": "_available",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4286,
                          "src": "13001:10:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4275,
                        "id": 4298,
                        "nodeType": "Return",
                        "src": "12994:17:7"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4302
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4302,
                      "name": "_basePercentage",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "13093:23:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4301,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13093:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4306,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4304,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4271,
                        "src": "13144:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 4303,
                      "name": "getAuctionBasePercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4652,
                      "src": "13119:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 4305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13119:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13093:54:7"
                },
                {
                  "assignments": [
                    4308
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4308,
                      "name": "_elapsedPercentage",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "13157:26:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4307,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13157:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4323,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4319,
                            "name": "TBTCConstants",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6757,
                            "src": "13267:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                              "typeString": "type(library TBTCConstants)"
                            }
                          },
                          "id": 4320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAuctionDuration",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6756,
                          "src": "13267:32:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                            "typeString": "function () pure returns (uint256)"
                          }
                        },
                        "id": 4321,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13267:34:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4316,
                            "name": "_elapsed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4277,
                            "src": "13236:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4313,
                                "name": "_basePercentage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4302,
                                "src": "13215:15:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "313030",
                                    "id": 4310,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13206:3:7",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    },
                                    "value": "100"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    }
                                  ],
                                  "id": 4309,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13198:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 4311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13198:12:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16774,
                              "src": "13198:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13198:33:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16808,
                          "src": "13198:37:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13198:47:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4318,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16833,
                      "src": "13198:51:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13198:117:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13157:158:7"
                },
                {
                  "assignments": [
                    4325
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4325,
                      "name": "_percentage",
                      "nodeType": "VariableDeclaration",
                      "scope": 4339,
                      "src": "13325:19:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4324,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13325:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4330,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4328,
                        "name": "_elapsedPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4308,
                        "src": "13367:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4326,
                        "name": "_basePercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4302,
                        "src": "13347:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16749,
                      "src": "13347:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13347:39:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13325:61:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "313030",
                        "id": 4336,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13436:3:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        },
                        "value": "100"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4333,
                            "name": "_percentage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4325,
                            "src": "13419:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4331,
                            "name": "_available",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4286,
                            "src": "13404:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16808,
                          "src": "13404:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13404:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16833,
                      "src": "13404:31:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13404:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4275,
                  "id": 4338,
                  "nodeType": "Return",
                  "src": "13397:43:7"
                }
              ]
            },
            "documentation": "@notice     Calculates the amount of value at auction right now.\n @dev        We calculate the % of the auction that has elapsed, then scale the value up.\n @param _d   Deposit storage pointer.\n @return     The value in wei to distribute in the auction at the current time.",
            "id": 4340,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "auctionValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4271,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4340,
                  "src": "12742:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4270,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "12742:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12741:20:7"
            },
            "returnParameters": {
              "id": 4275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4274,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4340,
                  "src": "12785:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4273,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12785:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12784:9:7"
            },
            "scope": 5103,
            "src": "12720:727:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4355,
              "nodeType": "Block",
              "src": "13660:84:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4350,
                            "name": "TBTCConstants",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6757,
                            "src": "13700:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TBTCConstants_$6757_$",
                              "typeString": "type(library TBTCConstants)"
                            }
                          },
                          "id": 4351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getSatoshiMultiplier",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6668,
                          "src": "13700:34:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_pure$__$returns$_t_uint256_$",
                            "typeString": "function () pure returns (uint256)"
                          }
                        },
                        "id": 4352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13700:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4347,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4342,
                          "src": "13677:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4348,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "lotSizeSatoshis",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3838,
                        "src": "13677:18:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 4349,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16808,
                      "src": "13677:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13677:60:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4346,
                  "id": 4354,
                  "nodeType": "Return",
                  "src": "13670:67:7"
                }
              ]
            },
            "documentation": "@notice         Gets the lot size in erc20 decimal places (max 18)\n @return         uint256 lot size in 10**18 decimals.",
            "id": 4356,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lotSizeTbtc",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4343,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4342,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4356,
                  "src": "13610:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4341,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "13610:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13609:20:7"
            },
            "returnParameters": {
              "id": 4346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4345,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4356,
                  "src": "13651:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4344,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13651:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13650:9:7"
            },
            "scope": 5103,
            "src": "13589:155:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4371,
              "nodeType": "Block",
              "src": "14034:64:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4367,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4358,
                          "src": "14071:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4368,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signerFeeDivisor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3842,
                        "src": "14071:19:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4364,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4358,
                            "src": "14063:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          ],
                          "id": 4363,
                          "name": "lotSizeTbtc",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4356,
                          "src": "14051:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 4365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14051:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16833,
                      "src": "14051:19:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14051:40:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4362,
                  "id": 4370,
                  "nodeType": "Return",
                  "src": "14044:47:7"
                }
              ]
            },
            "documentation": "@notice         Determines the fees due to the signers for work performed.\n @dev            Signers are paid based on the TBTC issued.\n @return         Accumulated fees in 10**18 decimals.",
            "id": 4372,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerFeeTbtc",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4358,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4372,
                  "src": "13984:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4357,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "13984:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13983:20:7"
            },
            "returnParameters": {
              "id": 4362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4361,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4372,
                  "src": "14025:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14025:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14024:9:7"
            },
            "scope": 5103,
            "src": "13961:137:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4393,
              "nodeType": "Block",
              "src": "14514:151:7",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4380,
                            "name": "_pubkeyY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4374,
                            "src": "14536:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14528:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14528:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 4382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14548:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "14528:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4384,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14553:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "14528:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4391,
                    "nodeType": "Block",
                    "src": "14610:49:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "02",
                          "id": 4389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14631:7:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_f2ee15ea639b73fa3db9b34a245bdfa015c260c598b211bf05a1ecc4b3e3b4f2",
                            "typeString": "literal_string \"\u0002\""
                          },
                          "value": "\u0002"
                        },
                        "functionReturnParameters": 4378,
                        "id": 4390,
                        "nodeType": "Return",
                        "src": "14624:14:7"
                      }
                    ]
                  },
                  "id": 4392,
                  "nodeType": "IfStatement",
                  "src": "14524:135:7",
                  "trueBody": {
                    "id": 4388,
                    "nodeType": "Block",
                    "src": "14556:48:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "03",
                          "id": 4386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14577:7:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_69c322e3248a5dfc29d73c5b0553b0185a35cd5bb6386747517ef7e53b15e287",
                            "typeString": "literal_string \"\u0003\""
                          },
                          "value": "\u0003"
                        },
                        "functionReturnParameters": 4378,
                        "id": 4387,
                        "nodeType": "Return",
                        "src": "14570:14:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice             Determines the prefix to the compressed public key.\n @dev                The prefix encodes the parity of the Y coordinate.\n @param  _pubkeyY    The Y coordinate of the public key.\n @return             The 1-byte prefix for the compressed key.",
            "id": 4394,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineCompressionPrefix",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4374,
                  "name": "_pubkeyY",
                  "nodeType": "VariableDeclaration",
                  "scope": 4394,
                  "src": "14433:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4373,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14433:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14432:18:7"
            },
            "returnParameters": {
              "id": 4378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4377,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4394,
                  "src": "14496:12:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4376,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14496:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14495:14:7"
            },
            "scope": 5103,
            "src": "14397:268:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4411,
              "nodeType": "Block",
              "src": "15120:88:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4406,
                            "name": "_pubkeyY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4398,
                            "src": "15181:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 4405,
                          "name": "determineCompressionPrefix",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4394,
                          "src": "15154:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes32) pure returns (bytes memory)"
                          }
                        },
                        "id": 4407,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15154:36:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4408,
                        "name": "_pubkeyX",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4396,
                        "src": "15192:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4403,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "15137:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 4404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15137:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 4409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15137:64:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4402,
                  "id": 4410,
                  "nodeType": "Return",
                  "src": "15130:71:7"
                }
              ]
            },
            "documentation": "@notice             Compresses a public key.\n @dev                Converts the 64-byte key to a 33-byte key, bitcoin-style.\n @param  _pubkeyX    The X coordinate of the public key.\n @param  _pubkeyY    The Y coordinate of the public key.\n @return             The 33-byte compressed pubkey.",
            "id": 4412,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compressPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4396,
                  "name": "_pubkeyX",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "15021:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4395,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15021:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4398,
                  "name": "_pubkeyY",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "15039:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4397,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15039:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15020:36:7"
            },
            "returnParameters": {
              "id": 4402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4401,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4412,
                  "src": "15102:12:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4400,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15102:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15101:14:7"
            },
            "scope": 5103,
            "src": "14997:211:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4427,
              "nodeType": "Block",
              "src": "15524:88:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4421,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4414,
                          "src": "15558:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4422,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signingGroupPubkeyX",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3864,
                        "src": "15558:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4423,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4414,
                          "src": "15582:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4424,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signingGroupPubkeyY",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3866,
                        "src": "15582:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4419,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18347,
                        "src": "15541:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 4420,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "15541:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 4425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15541:64:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4418,
                  "id": 4426,
                  "nodeType": "Return",
                  "src": "15534:71:7"
                }
              ]
            },
            "documentation": "@notice    Returns the packed public key (64 bytes) for the signing group.\n @dev       We store it as 2 bytes32, (2 slots) then repack it on demand.\n @return    64 byte public key.",
            "id": 4428,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerPubkey",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4414,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4428,
                  "src": "15439:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4413,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "15439:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15438:20:7"
            },
            "returnParameters": {
              "id": 4418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4417,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4428,
                  "src": "15506:12:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4416,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15506:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15505:14:7"
            },
            "scope": 5103,
            "src": "15417:195:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4457,
              "nodeType": "Block",
              "src": "15890:233:7",
              "statements": [
                {
                  "assignments": [
                    4436
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4436,
                      "name": "_pubkey",
                      "nodeType": "VariableDeclaration",
                      "scope": 4457,
                      "src": "15900:20:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4435,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "15900:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4443,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4438,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4430,
                          "src": "15950:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signingGroupPubkeyX",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3864,
                        "src": "15950:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4440,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4430,
                          "src": "15974:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4441,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "signingGroupPubkeyY",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3866,
                        "src": "15974:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4437,
                      "name": "compressPubkey",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4412,
                      "src": "15935:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes32,bytes32) pure returns (bytes memory)"
                      }
                    },
                    "id": 4442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15935:62:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15900:97:7"
                },
                {
                  "assignments": [
                    4445
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4445,
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 4457,
                      "src": "16007:20:7",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4444,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "16007:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4449,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4446,
                        "name": "_pubkey",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4436,
                        "src": "16030:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4447,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash160",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11834,
                      "src": "16030:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 4448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16030:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16007:40:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16090:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4451,
                            "name": "_digest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4445,
                            "src": "16072:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13315,
                          "src": "16072:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_address_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (address)"
                          }
                        },
                        "id": 4454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16072:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4450,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "16064:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes20_$",
                        "typeString": "type(bytes20)"
                      },
                      "typeName": "bytes20"
                    },
                    "id": 4455,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16064:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "functionReturnParameters": 4434,
                  "id": 4456,
                  "nodeType": "Return",
                  "src": "16057:36:7"
                }
              ]
            },
            "documentation": "@notice    Returns the Bitcoin pubkeyhash (hash160) for the signing group.\n @dev       This is used in bitcoin output scripts for the signers.\n @return    20-bytes public key hash.",
            "id": 4458,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "signerPKH",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4430,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4458,
                  "src": "15840:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4429,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "15840:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15839:20:7"
            },
            "returnParameters": {
              "id": 4434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4433,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4458,
                  "src": "15881:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes20",
                    "typeString": "bytes20"
                  },
                  "typeName": {
                    "id": 4432,
                    "name": "bytes20",
                    "nodeType": "ElementaryTypeName",
                    "src": "15881:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15880:9:7"
            },
            "scope": 5103,
            "src": "15821:302:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4470,
              "nodeType": "Block",
              "src": "16395:57:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4466,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4460,
                          "src": "16427:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4467,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "utxoValueBytes",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3880,
                        "src": "16427:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      ],
                      "id": 4465,
                      "name": "bytes8LEToUint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4520,
                      "src": "16412:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes8_$returns$_t_uint256_$",
                        "typeString": "function (bytes8) pure returns (uint256)"
                      }
                    },
                    "id": 4468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16412:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4464,
                  "id": 4469,
                  "nodeType": "Return",
                  "src": "16405:40:7"
                }
              ]
            },
            "documentation": "@notice    Returns the size of the deposit UTXO in satoshi.\n @dev       We store the deposit as bytes8 to make signature checking easier.\n @return    UTXO value in satoshi.",
            "id": 4471,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "utxoValue",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4460,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4471,
                  "src": "16343:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4459,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "16343:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16342:20:7"
            },
            "returnParameters": {
              "id": 4464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4463,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4471,
                  "src": "16386:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4462,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16386:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16385:9:7"
            },
            "scope": 5103,
            "src": "16324:128:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4483,
              "nodeType": "Block",
              "src": "16750:57:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4478,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4473,
                          "src": "16767:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4479,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcSystem",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3828,
                        "src": "16767:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITBTCSystem_$5511",
                          "typeString": "contract ITBTCSystem"
                        }
                      },
                      "id": 4480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "fetchBitcoinPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5454,
                      "src": "16767:31:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 4481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16767:33:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4477,
                  "id": 4482,
                  "nodeType": "Return",
                  "src": "16760:40:7"
                }
              ]
            },
            "documentation": "@notice     Gets the current price of Bitcoin in Ether.\n @dev        Polls the price feed via the system contract.\n @return     The current price of 1 sat in wei.",
            "id": 4484,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fetchBitcoinPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4474,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4473,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4484,
                  "src": "16670:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4472,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "16670:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16669:20:7"
            },
            "returnParameters": {
              "id": 4477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4476,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4484,
                  "src": "16737:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16737:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16736:9:7"
            },
            "scope": 5103,
            "src": "16643:164:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4502,
              "nodeType": "Block",
              "src": "17084:114:7",
              "statements": [
                {
                  "assignments": [
                    4492
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4492,
                      "name": "_keep",
                      "nodeType": "VariableDeclaration",
                      "scope": 4502,
                      "src": "17094:22:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                        "typeString": "contract IBondedECDSAKeep"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4491,
                        "name": "IBondedECDSAKeep",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11428,
                        "src": "17094:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4497,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4494,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4486,
                          "src": "17136:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4495,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keepAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3858,
                        "src": "17136:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4493,
                      "name": "IBondedECDSAKeep",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11428,
                      "src": "17119:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                        "typeString": "type(contract IBondedECDSAKeep)"
                      }
                    },
                    "id": 4496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17119:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                      "typeString": "contract IBondedECDSAKeep"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17094:57:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4498,
                        "name": "_keep",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4492,
                        "src": "17168:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "id": 4499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkBondAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11388,
                      "src": "17168:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 4500,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17168:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4490,
                  "id": 4501,
                  "nodeType": "Return",
                  "src": "17161:30:7"
                }
              ]
            },
            "documentation": "@notice     Fetches the Keep's bond amount in wei.\n @dev        Calls the keep contract to do so.\n @return     The amount of bonded ETH in wei.",
            "id": 4503,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fetchBondAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4486,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4503,
                  "src": "17004:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4485,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "17004:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17003:20:7"
            },
            "returnParameters": {
              "id": 4490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4489,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4503,
                  "src": "17071:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4488,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17071:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17070:9:7"
            },
            "scope": 5103,
            "src": "16979:219:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4519,
              "nodeType": "Block",
              "src": "17503:78:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4512,
                                "name": "_b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4505,
                                "src": "17537:2:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4510,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18347,
                                "src": "17520:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 4511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "17520:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 4513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17520:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reverseEndianness",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11643,
                          "src": "17520:38:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 4515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17520:40:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4516,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "bytesToUint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11790,
                      "src": "17520:52:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) pure returns (uint256)"
                      }
                    },
                    "id": 4517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17520:54:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4509,
                  "id": 4518,
                  "nodeType": "Return",
                  "src": "17513:61:7"
                }
              ]
            },
            "documentation": "@notice         Convert a LE bytes8 to a uint256.\n @dev            Do this by converting to bytes, then reversing endianness, then converting to int.\n @return         The uint256 represented in LE by the bytes8.",
            "id": 4520,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "bytes8LEToUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4506,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4505,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 4520,
                  "src": "17462:9:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 4504,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "17462:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17461:11:7"
            },
            "returnParameters": {
              "id": 4509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4508,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4520,
                  "src": "17494:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4507,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17494:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17493:9:7"
            },
            "scope": 5103,
            "src": "17438:143:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4534,
              "nodeType": "Block",
              "src": "18106:51:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4529,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4522,
                        "src": "18123:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4530,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "approvedDigests",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3892,
                      "src": "18123:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                        "typeString": "mapping(bytes32 => uint256)"
                      }
                    },
                    "id": 4532,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 4531,
                      "name": "_digest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4524,
                      "src": "18142:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "18123:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4528,
                  "id": 4533,
                  "nodeType": "Return",
                  "src": "18116:34:7"
                }
              ]
            },
            "documentation": "@notice         Gets timestamp of digest approval for signing.\n @dev            Identifies entry in the recorded approvals by keep ID and digest pair.\n @param _digest  Digest to check approval for.\n @return         Timestamp from the moment of recording the digest for signing.\n                 Returns 0 if the digest was not approved for signing.",
            "id": 4535,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wasDigestApprovedForSigning",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4522,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4535,
                  "src": "18009:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4521,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "18009:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4524,
                  "name": "_digest",
                  "nodeType": "VariableDeclaration",
                  "scope": 4535,
                  "src": "18029:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4523,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "18029:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18008:37:7"
            },
            "returnParameters": {
              "id": 4528,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4527,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4535,
                  "src": "18093:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4526,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18093:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18092:9:7"
            },
            "scope": 5103,
            "src": "17972:185:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4581,
              "nodeType": "Block",
              "src": "18475:294:7",
              "statements": [
                {
                  "assignments": [
                    4543
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4543,
                      "name": "tokenHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 4581,
                      "src": "18485:19:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4542,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "18485:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4547,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18515:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 4544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18507:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 4546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18507:10:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18485:32:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4553,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18430,
                                "src": "18572:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              ],
                              "id": 4552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18564:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18564:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "18556:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18556:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4548,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4537,
                          "src": "18531:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4549,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "feeRebateToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3834,
                        "src": "18531:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                          "typeString": "contract FeeRebateToken"
                        }
                      },
                      "id": 4550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exists",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6299,
                      "src": "18531:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (uint256) view external returns (bool)"
                      }
                    },
                    "id": 4556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18531:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4574,
                  "nodeType": "IfStatement",
                  "src": "18527:190:7",
                  "trueBody": {
                    "id": 4573,
                    "nodeType": "Block",
                    "src": "18581:136:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4557,
                            "name": "tokenHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4543,
                            "src": "18595:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 4565,
                                                "name": "this",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 18430,
                                                "src": "18684:4:7",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                                  "typeString": "library DepositUtils"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                                  "typeString": "library DepositUtils"
                                                }
                                              ],
                                              "id": 4564,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "nodeType": "ElementaryTypeNameExpression",
                                              "src": "18676:7:7",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_address_$",
                                                "typeString": "type(address)"
                                              },
                                              "typeName": "address"
                                            },
                                            "id": 4566,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "18676:13:7",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 4563,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "18668:7:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": "uint256"
                                        },
                                        "id": 4567,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "18668:22:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4560,
                                          "name": "_d",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4537,
                                          "src": "18642:2:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                            "typeString": "struct DepositUtils.Deposit storage pointer"
                                          }
                                        },
                                        "id": 4561,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "feeRebateToken",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3834,
                                        "src": "18642:17:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_FeeRebateToken_$6300",
                                          "typeString": "contract FeeRebateToken"
                                        }
                                      },
                                      "id": 4562,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "ownerOf",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 17591,
                                      "src": "18642:25:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                                        "typeString": "function (uint256) view external returns (address)"
                                      }
                                    },
                                    "id": 4568,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "18642:49:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 4559,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "18634:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": "uint160"
                                },
                                "id": 4569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18634:58:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 4558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18609:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18609:97:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "18595:111:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4572,
                        "nodeType": "ExpressionStatement",
                        "src": "18595:111:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4577,
                            "name": "tokenHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4543,
                            "src": "18749:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "18741:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": "uint160"
                        },
                        "id": 4578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18741:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 4575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "18733:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 4579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18733:29:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 4541,
                  "id": 4580,
                  "nodeType": "Return",
                  "src": "18726:36:7"
                }
              ]
            },
            "documentation": "@notice         Looks up the Fee Rebate Token holder.\n @return         The current token holder if the Token exists.\n                 address(0) if the token does not exist.",
            "id": 4582,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "feeRebateTokenHolder",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4537,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4582,
                  "src": "18389:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4536,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "18389:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18388:20:7"
            },
            "returnParameters": {
              "id": 4541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4540,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4582,
                  "src": "18454:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4539,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18454:15:7",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18453:17:7"
            },
            "scope": 5103,
            "src": "18359:410:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4603,
              "nodeType": "Block",
              "src": "19109:135:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4596,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 18430,
                                        "src": "19215:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                          "typeString": "library DepositUtils"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                          "typeString": "library DepositUtils"
                                        }
                                      ],
                                      "id": 4595,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "19207:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 4597,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "19207:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 4594,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "19199:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": "uint256"
                                },
                                "id": 4598,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19199:22:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4591,
                                  "name": "_d",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4584,
                                  "src": "19171:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                    "typeString": "struct DepositUtils.Deposit storage pointer"
                                  }
                                },
                                "id": 4592,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tbtcDepositToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3832,
                                "src": "19171:19:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC721_$18287",
                                  "typeString": "contract IERC721"
                                }
                              },
                              "id": 4593,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "ownerOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18227,
                              "src": "19171:27:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                                "typeString": "function (uint256) view external returns (address)"
                              }
                            },
                            "id": 4599,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19171:51:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 4590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "19163:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": "uint160"
                        },
                        "id": 4600,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19163:60:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 4589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "19138:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 4601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19138:99:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 4588,
                  "id": 4602,
                  "nodeType": "Return",
                  "src": "19119:118:7"
                }
              ]
            },
            "documentation": "@notice         Looks up the deposit beneficiary by calling the tBTC system.\n @dev            We cast the address to a uint256 to match the 721 standard.\n @return         The current deposit beneficiary.",
            "id": 4604,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "depositOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4585,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4584,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4604,
                  "src": "19023:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4583,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "19023:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19022:20:7"
            },
            "returnParameters": {
              "id": 4588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4587,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4604,
                  "src": "19088:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4586,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19088:15:7",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19087:17:7"
            },
            "scope": 5103,
            "src": "19001:243:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4635,
              "nodeType": "Block",
              "src": "19460:165:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4609,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4606,
                        "src": "19470:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4611,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "redeemerOutputScript",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3870,
                      "src": "19470:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage",
                        "typeString": "bytes storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "",
                      "id": 4612,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19496:2:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "src": "19470:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage",
                      "typeString": "bytes storage ref"
                    }
                  },
                  "id": 4614,
                  "nodeType": "ExpressionStatement",
                  "src": "19470:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4615,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4606,
                        "src": "19508:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4617,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialRedemptionFee",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3872,
                      "src": "19508:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19534:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19508:27:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4620,
                  "nodeType": "ExpressionStatement",
                  "src": "19508:27:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4621,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4606,
                        "src": "19545:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4623,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "withdrawalRequestTime",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3876,
                      "src": "19545:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "19572:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "19545:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4626,
                  "nodeType": "ExpressionStatement",
                  "src": "19545:28:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4627,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4606,
                        "src": "19583:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4629,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastRequestedDigest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3878,
                      "src": "19583:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19616:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 4630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "19608:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": "bytes32"
                      },
                      "id": 4632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19608:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "19583:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4634,
                  "nodeType": "ExpressionStatement",
                  "src": "19583:35:7"
                }
              ]
            },
            "documentation": "@notice     Deletes state after termination of redemption process.\n @dev        We keep around the redeemer address so we can pay them out.",
            "id": 4636,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "redemptionTeardown",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4606,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4636,
                  "src": "19433:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4605,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "19433:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19432:20:7"
            },
            "returnParameters": {
              "id": 4608,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19460:0:7"
            },
            "scope": 5103,
            "src": "19405:220:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4651,
              "nodeType": "Block",
              "src": "20079:75:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4647,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4638,
                          "src": "20115:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4648,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "initialCollateralizedPercent",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3844,
                        "src": "20115:31:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3130303030",
                            "id": 4644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20104:5:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_10000_by_1",
                              "typeString": "int_const 10000"
                            },
                            "value": "10000"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_10000_by_1",
                              "typeString": "int_const 10000"
                            }
                          ],
                          "id": 4643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "20096:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 4645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20096:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16833,
                      "src": "20096:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20096:51:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4642,
                  "id": 4650,
                  "nodeType": "Return",
                  "src": "20089:58:7"
                }
              ]
            },
            "documentation": "@notice     Get the starting percentage of the bond at auction.\n @dev        This will return the same value regardless of collateral price.\n @return     The percentage of the InitialCollateralizationPercent that will result\n             in a 100% bond value base auction given perfect collateralization.",
            "id": 4652,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAuctionBasePercentage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4639,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4638,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4652,
                  "src": "19999:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4637,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "19999:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19998:20:7"
            },
            "returnParameters": {
              "id": 4642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4641,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4652,
                  "src": "20066:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20066:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20065:9:7"
            },
            "scope": 5103,
            "src": "19965:189:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4697,
              "nodeType": "Block",
              "src": "20404:399:7",
              "statements": [
                {
                  "assignments": [
                    4660
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4660,
                      "name": "_preCallBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 4697,
                      "src": "20414:23:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4659,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20414:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4665,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4662,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18430,
                          "src": "20448:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        ],
                        "id": 4661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20440:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4663,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20440:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "20440:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20414:47:7"
                },
                {
                  "assignments": [
                    4667
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4667,
                      "name": "_keep",
                      "nodeType": "VariableDeclaration",
                      "scope": 4697,
                      "src": "20472:22:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                        "typeString": "contract IBondedECDSAKeep"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4666,
                        "name": "IBondedECDSAKeep",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11428,
                        "src": "20472:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4672,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4669,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4654,
                          "src": "20514:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4670,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "keepAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3858,
                        "src": "20514:14:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4668,
                      "name": "IBondedECDSAKeep",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11428,
                      "src": "20497:16:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                        "typeString": "type(contract IBondedECDSAKeep)"
                      }
                    },
                    "id": 4671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20497:32:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                      "typeString": "contract IBondedECDSAKeep"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20472:57:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4673,
                        "name": "_keep",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4667,
                        "src": "20539:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                          "typeString": "contract IBondedECDSAKeep"
                        }
                      },
                      "id": 4675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "seizeSignerBonds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11406,
                      "src": "20539:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 4676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20539:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4677,
                  "nodeType": "ExpressionStatement",
                  "src": "20539:24:7"
                },
                {
                  "assignments": [
                    4679
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4679,
                      "name": "_postCallBalance",
                      "nodeType": "VariableDeclaration",
                      "scope": 4697,
                      "src": "20574:24:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4678,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20574:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4684,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4681,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18430,
                          "src": "20609:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DepositUtils_$5103",
                            "typeString": "library DepositUtils"
                          }
                        ],
                        "id": 4680,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "20601:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4682,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20601:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 4683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "20601:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20574:48:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4686,
                          "name": "_postCallBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4679,
                          "src": "20653:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4687,
                          "name": "_preCallBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4660,
                          "src": "20672:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20653:34:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f2066756e64732072656365697665642c20756e6578706563746564",
                        "id": 4689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "20701:31:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_081d9d88cd751124b06bf4b926a19d0dbebc6fe63a06d6b69caa0dfa83662184",
                          "typeString": "literal_string \"No funds received, unexpected\""
                        },
                        "value": "No funds received, unexpected"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_081d9d88cd751124b06bf4b926a19d0dbebc6fe63a06d6b69caa0dfa83662184",
                          "typeString": "literal_string \"No funds received, unexpected\""
                        }
                      ],
                      "id": 4685,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "20632:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20632:110:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4691,
                  "nodeType": "ExpressionStatement",
                  "src": "20632:110:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4694,
                        "name": "_preCallBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4660,
                        "src": "20780:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4692,
                        "name": "_postCallBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4679,
                        "src": "20759:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16774,
                      "src": "20759:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20759:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4658,
                  "id": 4696,
                  "nodeType": "Return",
                  "src": "20752:44:7"
                }
              ]
            },
            "documentation": "@notice     Seize the signer bond from the keep contract.\n @dev        we check our balance before and after.\n @return     The amount seized in wei.",
            "id": 4698,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "seizeSignerBonds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4654,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20357:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4653,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "20357:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20356:20:7"
            },
            "returnParameters": {
              "id": 4658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4657,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4698,
                  "src": "20395:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4656,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20395:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20394:9:7"
            },
            "scope": 5103,
            "src": "20331:472:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4721,
              "nodeType": "Block",
              "src": "21112:138:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4707,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4700,
                          "src": "21122:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4710,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "withdrawableAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3888,
                        "src": "21122:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4711,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 4709,
                        "name": "_withdrawer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4702,
                        "src": "21145:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21122:35:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4717,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4704,
                          "src": "21235:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4712,
                              "name": "_d",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4700,
                              "src": "21160:2:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                "typeString": "struct DepositUtils.Deposit storage pointer"
                              }
                            },
                            "id": 4713,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "withdrawableAmounts",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3888,
                            "src": "21160:22:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4715,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4714,
                            "name": "_withdrawer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4702,
                            "src": "21196:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21160:57:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4716,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16749,
                        "src": "21160:74:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21160:83:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21122:121:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4720,
                  "nodeType": "ExpressionStatement",
                  "src": "21122:121:7"
                }
              ]
            },
            "documentation": "@notice     Adds a given amount to the withdraw allowance for the address.\n @dev        Withdrawals can only happen when a contract is in an end-state.",
            "id": 4722,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "enableWithdrawal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4700,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4722,
                  "src": "21011:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4699,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "21011:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4702,
                  "name": "_withdrawer",
                  "nodeType": "VariableDeclaration",
                  "scope": 4722,
                  "src": "21052:19:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4701,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21052:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4704,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4722,
                  "src": "21081:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4703,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21081:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21001:101:7"
            },
            "returnParameters": {
              "id": 4706,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21112:0:7"
            },
            "scope": 5103,
            "src": "20976:274:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4784,
              "nodeType": "Block",
              "src": "21454:595:7",
              "statements": [
                {
                  "assignments": [
                    4728
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4728,
                      "name": "available",
                      "nodeType": "VariableDeclaration",
                      "scope": 4784,
                      "src": "21464:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4727,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "21464:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4734,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4729,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4724,
                        "src": "21484:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4730,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawableAmounts",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3888,
                      "src": "21484:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 4733,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4731,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18360,
                        "src": "21507:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "21507:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "21484:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21464:54:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4736,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4724,
                            "src": "21537:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 4737,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inEndState",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3394,
                          "src": "21537:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 4738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21537:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6e7472616374206e6f7420796574207465726d696e61746564",
                        "id": 4739,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21554:29:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b821579830bae56c125ec04c2e4e961229ba3c15d8bfea25f42d7d221a978e12",
                          "typeString": "literal_string \"Contract not yet terminated\""
                        },
                        "value": "Contract not yet terminated"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b821579830bae56c125ec04c2e4e961229ba3c15d8bfea25f42d7d221a978e12",
                          "typeString": "literal_string \"Contract not yet terminated\""
                        }
                      ],
                      "id": 4735,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "21529:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21529:55:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4741,
                  "nodeType": "ExpressionStatement",
                  "src": "21529:55:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4743,
                          "name": "available",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4728,
                          "src": "21602:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4744,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "21614:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "21602:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7468696e6720746f207769746864726177",
                        "id": 4746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21617:21:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1b19ac089d87f4146c293e731799080c98f8ee751187f94356e96cb0c086a394",
                          "typeString": "literal_string \"Nothing to withdraw\""
                        },
                        "value": "Nothing to withdraw"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1b19ac089d87f4146c293e731799080c98f8ee751187f94356e96cb0c086a394",
                          "typeString": "literal_string \"Nothing to withdraw\""
                        }
                      ],
                      "id": 4742,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "21594:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21594:45:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4748,
                  "nodeType": "ExpressionStatement",
                  "src": "21594:45:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4755,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4751,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18430,
                                "src": "21678:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              ],
                              "id": 4750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21670:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21670:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21670:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4754,
                          "name": "available",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4728,
                          "src": "21695:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "21670:34:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e73756666696369656e7420636f6e74726163742062616c616e6365",
                        "id": 4756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21718:31:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ec83fd00432662dbf5dd2aac1f81c346fbe87acecf7cd3f016ab25f549f71749",
                          "typeString": "literal_string \"Insufficient contract balance\""
                        },
                        "value": "Insufficient contract balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ec83fd00432662dbf5dd2aac1f81c346fbe87acecf7cd3f016ab25f549f71749",
                          "typeString": "literal_string \"Insufficient contract balance\""
                        }
                      ],
                      "id": 4749,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "21649:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21649:110:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4758,
                  "nodeType": "ExpressionStatement",
                  "src": "21649:110:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4759,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4724,
                          "src": "21812:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4763,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "withdrawableAmounts",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3888,
                        "src": "21812:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4764,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4761,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18360,
                          "src": "21835:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21835:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21812:34:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4765,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21849:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "21812:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4767,
                  "nodeType": "ExpressionStatement",
                  "src": "21812:38:7"
                },
                {
                  "assignments": [
                    4769,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4769,
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 4784,
                      "src": "21924:7:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4768,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "21924:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 4778,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "",
                        "id": 4776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21970:2:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4774,
                          "name": "available",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4728,
                          "src": "21959:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4770,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18360,
                              "src": "21937:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4771,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "21937:10:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "id": 4772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "21937:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                          }
                        },
                        "id": 4773,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "21937:21:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$",
                          "typeString": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                        }
                      },
                      "id": 4775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21937:32:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 4777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21937:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21923:50:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4780,
                        "name": "ok",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4769,
                        "src": "21991:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e646572",
                        "id": 4781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21995:46:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f5f005cb740539ee3516c799d64e633e99478206e886f7db1a394aade888067",
                          "typeString": "literal_string \"Failed to send withdrawable amount to sender\""
                        },
                        "value": "Failed to send withdrawable amount to sender"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f5f005cb740539ee3516c799d64e633e99478206e886f7db1a394aade888067",
                          "typeString": "literal_string \"Failed to send withdrawable amount to sender\""
                        }
                      ],
                      "id": 4779,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "21983:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21983:59:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4783,
                  "nodeType": "ExpressionStatement",
                  "src": "21983:59:7"
                }
              ]
            },
            "documentation": "@notice     Withdraw caller's allowance.\n @dev        Withdrawals can only happen when a contract is in an end-state.",
            "id": 4785,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawFunds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4724,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4785,
                  "src": "21412:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4723,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "21412:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21411:33:7"
            },
            "returnParameters": {
              "id": 4726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21454:0:7"
            },
            "scope": 5103,
            "src": "21389:660:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4798,
              "nodeType": "Block",
              "src": "22296:58:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4792,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4787,
                        "src": "22313:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      },
                      "id": 4793,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawableAmounts",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3888,
                      "src": "22313:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 4796,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4794,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18360,
                        "src": "22336:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22336:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22313:34:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4791,
                  "id": 4797,
                  "nodeType": "Return",
                  "src": "22306:41:7"
                }
              ]
            },
            "documentation": "@notice     Get the caller's withdraw allowance.\n @return     The caller's withdraw allowance in wei.",
            "id": 4799,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getWithdrawableAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4787,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "22203:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4786,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "22203:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22202:33:7"
            },
            "returnParameters": {
              "id": 4791,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4790,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4799,
                  "src": "22283:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4789,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22283:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22282:9:7"
            },
            "scope": 5103,
            "src": "22172:182:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4842,
              "nodeType": "Block",
              "src": "22562:424:7",
              "statements": [
                {
                  "assignments": [
                    4805
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4805,
                      "name": "rebateTokenHolder",
                      "nodeType": "VariableDeclaration",
                      "scope": 4842,
                      "src": "22572:25:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4804,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "22572:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4809,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4807,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4801,
                        "src": "22621:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 4806,
                      "name": "feeRebateTokenHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4582,
                      "src": "22600:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                      }
                    },
                    "id": 4808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22600:24:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22572:52:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4810,
                      "name": "rebateTokenHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4805,
                      "src": "22709:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "22738:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 4811,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "22730:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4813,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22730:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "22709:31:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4817,
                  "nodeType": "IfStatement",
                  "src": "22705:68:7",
                  "trueBody": {
                    "id": 4816,
                    "nodeType": "Block",
                    "src": "22742:31:7",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 4803,
                        "id": 4815,
                        "nodeType": "Return",
                        "src": "22756:7:7"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4822,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18430,
                              "src": "22867:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                "typeString": "library DepositUtils"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                "typeString": "library DepositUtils"
                              }
                            ],
                            "id": 4821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "22859:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22859:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4818,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4801,
                            "src": "22836:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 4819,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tbtcToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3830,
                          "src": "22836:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_TBTCToken_$8561",
                            "typeString": "contract TBTCToken"
                          }
                        },
                        "id": 4820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balanceOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 17007,
                        "src": "22836:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view external returns (uint256)"
                        }
                      },
                      "id": 4824,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22836:37:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4826,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4801,
                          "src": "22891:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        ],
                        "id": 4825,
                        "name": "signerFeeTbtc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4372,
                        "src": "22877:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 4827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "22877:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22836:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4841,
                  "nodeType": "IfStatement",
                  "src": "22832:148:7",
                  "trueBody": {
                    "id": 4840,
                    "nodeType": "Block",
                    "src": "22896:84:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4834,
                              "name": "rebateTokenHolder",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4805,
                              "src": "22932:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4836,
                                  "name": "_d",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4801,
                                  "src": "22965:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                    "typeString": "struct DepositUtils.Deposit storage pointer"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                    "typeString": "struct DepositUtils.Deposit storage pointer"
                                  }
                                ],
                                "id": 4835,
                                "name": "signerFeeTbtc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4372,
                                "src": "22951:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                }
                              },
                              "id": 4837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22951:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4829,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4801,
                                "src": "22910:2:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 4832,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tbtcToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3830,
                              "src": "22910:12:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_TBTCToken_$8561",
                                "typeString": "contract TBTCToken"
                              }
                            },
                            "id": 4833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 17026,
                            "src": "22910:21:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4838,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22910:59:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4839,
                        "nodeType": "ExpressionStatement",
                        "src": "22910:59:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice     Distributes the fee rebate to the Fee Rebate Token owner.\n @dev        Whenever this is called we are shutting down.",
            "id": 4843,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "distributeFeeRebate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4801,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4843,
                  "src": "22533:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4800,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "22533:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22532:20:7"
            },
            "returnParameters": {
              "id": 4803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22562:0:7"
            },
            "scope": 5103,
            "src": "22504:482:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4881,
              "nodeType": "Block",
              "src": "23299:261:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4856,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4852,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18430,
                                "src": "23325:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                  "typeString": "library DepositUtils"
                                }
                              ],
                              "id": 4851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23317:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 4853,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23317:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "23317:21:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4855,
                          "name": "_ethValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4847,
                          "src": "23342:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "23317:34:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420656e6f7567682066756e647320746f2073656e64",
                        "id": 4857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23353:26:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9476531a76f04b5f2de46913967db55b84e39554821c5291fefd8f5b1d965ae8",
                          "typeString": "literal_string \"Not enough funds to send\""
                        },
                        "value": "Not enough funds to send"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9476531a76f04b5f2de46913967db55b84e39554821c5291fefd8f5b1d965ae8",
                          "typeString": "literal_string \"Not enough funds to send\""
                        }
                      ],
                      "id": 4850,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "23309:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23309:71:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4859,
                  "nodeType": "ExpressionStatement",
                  "src": "23309:71:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4860,
                      "name": "_ethValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4847,
                      "src": "23394:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23406:1:7",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23394:13:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4880,
                  "nodeType": "IfStatement",
                  "src": "23390:164:7",
                  "trueBody": {
                    "id": 4879,
                    "nodeType": "Block",
                    "src": "23409:145:7",
                    "statements": [
                      {
                        "assignments": [
                          4864
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4864,
                            "name": "_keep",
                            "nodeType": "VariableDeclaration",
                            "scope": 4879,
                            "src": "23423:22:7",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                              "typeString": "contract IBondedECDSAKeep"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4863,
                              "name": "IBondedECDSAKeep",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 11428,
                              "src": "23423:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                                "typeString": "contract IBondedECDSAKeep"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4869,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4866,
                                "name": "_d",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4845,
                                "src": "23465:2:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              },
                              "id": 4867,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "keepAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3858,
                              "src": "23465:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4865,
                            "name": "IBondedECDSAKeep",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11428,
                            "src": "23448:16:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBondedECDSAKeep_$11428_$",
                              "typeString": "type(contract IBondedECDSAKeep)"
                            }
                          },
                          "id": 4868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23448:32:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                            "typeString": "contract IBondedECDSAKeep"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23423:57:7"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4875,
                                "name": "_ethValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4847,
                                "src": "23531:9:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4870,
                                  "name": "_keep",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4864,
                                  "src": "23494:5:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBondedECDSAKeep_$11428",
                                    "typeString": "contract IBondedECDSAKeep"
                                  }
                                },
                                "id": 4873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "returnPartialSignerBonds",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11409,
                                "src": "23494:30:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_payable$__$returns$__$",
                                  "typeString": "function () payable external"
                                }
                              },
                              "id": 4874,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "23494:36:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_setvalue_pure$_t_uint256_$returns$_t_function_external_payable$__$returns$__$value_$",
                                "typeString": "function (uint256) pure returns (function () payable external)"
                              }
                            },
                            "id": 4876,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23494:47:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                              "typeString": "function () payable external"
                            }
                          },
                          "id": 4877,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23494:49:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4878,
                        "nodeType": "ExpressionStatement",
                        "src": "23494:49:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice             Pushes ether held by the deposit to the signer group.\n @dev                Ether is returned to signing group members bonds.\n @param  _ethValue   The amount of ether to send.",
            "id": 4882,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pushFundsToKeepGroup",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4848,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4845,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 4882,
                  "src": "23239:18:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4844,
                    "name": "Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "23239:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4847,
                  "name": "_ethValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 4882,
                  "src": "23259:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4846,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23259:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23238:39:7"
            },
            "returnParameters": {
              "id": 4849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23299:0:7"
            },
            "scope": 5103,
            "src": "23209:351:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5031,
              "nodeType": "Block",
              "src": "25214:2051:7",
              "statements": [
                {
                  "assignments": [
                    4898
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4898,
                      "name": "redeemerHoldsTdt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25224:21:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4897,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "25224:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4906,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4899,
                      "name": "_assumeRedeemerHoldsTdt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4888,
                      "src": "25260:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 4904,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4901,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4884,
                            "src": "25300:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          ],
                          "id": 4900,
                          "name": "depositOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4604,
                          "src": "25287:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                          }
                        },
                        "id": 4902,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25287:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4903,
                        "name": "_redeemer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4886,
                        "src": "25307:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "25287:29:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25260:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25224:92:7"
                },
                {
                  "assignments": [
                    4908
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4908,
                      "name": "preTerm",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25326:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4907,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "25326:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4919,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4913,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4910,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4884,
                            "src": "25355:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          ],
                          "id": 4909,
                          "name": "remainingTerm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4269,
                          "src": "25341:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 4911,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25341:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25361:1:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "25341:21:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4917,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "25366:20:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4914,
                            "name": "_d",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4884,
                            "src": "25367:2:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                              "typeString": "struct DepositUtils.Deposit storage pointer"
                            }
                          },
                          "id": 4915,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "inCourtesyCall",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3564,
                          "src": "25367:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_bool_$bound_to$_t_struct$_Deposit_$3893_storage_ptr_$",
                            "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                          }
                        },
                        "id": 4916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25367:19:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25341:45:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25326:60:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4921,
                          "name": "redeemerHoldsTdt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4898,
                          "src": "25418:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "25438:8:7",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4922,
                            "name": "preTerm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4908,
                            "src": "25439:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "25418:28:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c",
                        "id": 4925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25460:74:7",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_76fc0e450ff4f9f7423a63d9b733693ed89eecb2005b5e9b7e00120158b951eb",
                          "typeString": "literal_string \"Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL\""
                        },
                        "value": "Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_76fc0e450ff4f9f7423a63d9b733693ed89eecb2005b5e9b7e00120158b951eb",
                          "typeString": "literal_string \"Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL\""
                        }
                      ],
                      "id": 4920,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "25397:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25397:147:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4927,
                  "nodeType": "ExpressionStatement",
                  "src": "25397:147:7"
                },
                {
                  "assignments": [
                    4929
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4929,
                      "name": "frtExists",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25555:14:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4928,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "25555:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4937,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    },
                    "id": 4936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4931,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4884,
                          "src": "25593:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        ],
                        "id": 4930,
                        "name": "feeRebateTokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4582,
                        "src": "25572:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$",
                          "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                        }
                      },
                      "id": 4932,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25572:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "25608:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 4933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "25600:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 4935,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25600:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "25572:38:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25555:55:7"
                },
                {
                  "assignments": [
                    4939
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4939,
                      "name": "redeemerHoldsFrt",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25620:21:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4938,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "25620:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4945,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4941,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4884,
                          "src": "25665:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        ],
                        "id": 4940,
                        "name": "feeRebateTokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4582,
                        "src": "25644:20:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_address_payable_$",
                          "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)"
                        }
                      },
                      "id": 4942,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "25644:24:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4943,
                      "name": "_redeemer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4886,
                      "src": "25672:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "25644:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25620:61:7"
                },
                {
                  "assignments": [
                    4947
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4947,
                      "name": "signerFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25691:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4946,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25691:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4951,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4949,
                        "name": "_d",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4884,
                        "src": "25725:2:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                          "typeString": "struct DepositUtils.Deposit storage pointer"
                        }
                      ],
                      "id": 4948,
                      "name": "signerFeeTbtc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4372,
                      "src": "25711:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                        "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 4950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25711:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25691:37:7"
                },
                {
                  "assignments": [
                    4953
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4953,
                      "name": "feeEscrow",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "25739:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4952,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "25739:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4961,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4955,
                        "name": "signerFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4947,
                        "src": "25817:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4956,
                        "name": "preTerm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4908,
                        "src": "25844:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4957,
                        "name": "frtExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4929,
                        "src": "25869:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4958,
                        "name": "redeemerHoldsTdt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4898,
                        "src": "25896:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4959,
                        "name": "redeemerHoldsFrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4939,
                        "src": "25930:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4954,
                      "name": "calculateRedemptionFeeEscrow",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5102,
                      "src": "25771:28:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$returns$_t_uint256_$",
                        "typeString": "function (uint256,bool,bool,bool,bool) pure returns (uint256)"
                      }
                    },
                    "id": 4960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25771:189:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25739:221:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4962,
                      "name": "owedToDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4891,
                      "src": "26069:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4970,
                          "name": "feeEscrow",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4953,
                          "src": "26201:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4965,
                                  "name": "_d",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4884,
                                  "src": "26140:2:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                    "typeString": "struct DepositUtils.Deposit storage pointer"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                    "typeString": "struct DepositUtils.Deposit storage pointer"
                                  }
                                ],
                                "id": 4964,
                                "name": "lotSizeTbtc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4356,
                                "src": "26128:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_Deposit_$3893_storage_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)"
                                }
                              },
                              "id": 4966,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26128:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4967,
                              "name": "redeemerHoldsTdt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4898,
                              "src": "26157:16:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4963,
                            "name": "calculateBaseRedemptionCharge",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5049,
                            "src": "26085:29:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (uint256,bool) pure returns (uint256)"
                            }
                          },
                          "id": 4968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26085:98:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16749,
                        "src": "26085:115:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4971,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "26085:126:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26069:142:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4973,
                  "nodeType": "ExpressionStatement",
                  "src": "26069:142:7"
                },
                {
                  "assignments": [
                    4975
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4975,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 5031,
                      "src": "26328:15:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4974,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26328:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4983,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4980,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18430,
                            "src": "26377:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DepositUtils_$5103",
                              "typeString": "library DepositUtils"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DepositUtils_$5103",
                              "typeString": "library DepositUtils"
                            }
                          ],
                          "id": 4979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "26369:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 4981,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "26369:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4976,
                          "name": "_d",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4884,
                          "src": "26346:2:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                            "typeString": "struct DepositUtils.Deposit storage pointer"
                          }
                        },
                        "id": 4977,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "tbtcToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3830,
                        "src": "26346:12:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TBTCToken_$8561",
                          "typeString": "contract TBTCToken"
                        }
                      },
                      "id": 4978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 17007,
                      "src": "26346:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 4982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26346:37:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26328:55:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4984,
                      "name": "owedToDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4891,
                      "src": "26397:13:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4985,
                      "name": "balance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4975,
                      "src": "26413:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26397:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4999,
                    "nodeType": "Block",
                    "src": "26495:42:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4995,
                            "name": "owedToDeposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4891,
                            "src": "26509:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26525:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "26509:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4998,
                        "nodeType": "ExpressionStatement",
                        "src": "26509:17:7"
                      }
                    ]
                  },
                  "id": 5000,
                  "nodeType": "IfStatement",
                  "src": "26393:144:7",
                  "trueBody": {
                    "id": 4994,
                    "nodeType": "Block",
                    "src": "26422:67:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4987,
                            "name": "owedToDeposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4891,
                            "src": "26436:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 4990,
                                "name": "balance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4975,
                                "src": "26470:7:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4988,
                                "name": "owedToDeposit",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4891,
                                "src": "26452:13:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16774,
                              "src": "26452:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4991,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26452:26:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26436:42:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4993,
                        "nodeType": "ExpressionStatement",
                        "src": "26436:42:7"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 5001,
                        "name": "preTerm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4908,
                        "src": "26931:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5002,
                        "name": "frtExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4929,
                        "src": "26942:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "26931:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "26955:17:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 5004,
                        "name": "redeemerHoldsFrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4939,
                        "src": "26956:16:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "26931:41:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5012,
                  "nodeType": "IfStatement",
                  "src": "26927:99:7",
                  "trueBody": {
                    "id": 5011,
                    "nodeType": "Block",
                    "src": "26974:52:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5007,
                            "name": "owedToFrtHolder",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4895,
                            "src": "26988:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5008,
                            "name": "signerFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4947,
                            "src": "27006:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26988:27:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5010,
                        "nodeType": "ExpressionStatement",
                        "src": "26988:27:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5013,
                      "name": "owedToTdtHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4893,
                      "src": "27089:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5022,
                          "name": "owedToFrtHolder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4895,
                          "src": "27166:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5019,
                              "name": "signerFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4947,
                              "src": "27138:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5016,
                                  "name": "owedToDeposit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4891,
                                  "src": "27119:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5014,
                                  "name": "balance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4975,
                                  "src": "27107:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5015,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16749,
                                "src": "27107:11:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5017,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "27107:26:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5018,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16774,
                            "src": "27107:30:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5020,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27107:41:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 16774,
                        "src": "27107:45:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27107:84:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27089:102:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5025,
                  "nodeType": "ExpressionStatement",
                  "src": "27089:102:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 5026,
                        "name": "owedToDeposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4891,
                        "src": "27210:13:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5027,
                        "name": "owedToTdtHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4893,
                        "src": "27225:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5028,
                        "name": "owedToFrtHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4895,
                        "src": "27242:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5029,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "27209:49:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 4896,
                  "id": 5030,
                  "nodeType": "Return",
                  "src": "27202:56:7"
                }
              ]
            },
            "documentation": "@notice Calculate TBTC amount required for redemption by a specified\n         _redeemer. If _assumeRedeemerHoldTdt is true, return the\n         requirement as if the redeemer holds this deposit's TDT.\n @dev Will revert if redemption is not possible by the current owner and\n      _assumeRedeemerHoldsTdt was not set. Setting\n      _assumeRedeemerHoldsTdt only when appropriate is the responsibility\n      of the caller; as such, this function should NEVER be publicly\n      exposed.\n @param _redeemer The account that should be treated as redeeming this\n        deposit  for the purposes of this calculation.\n @param _assumeRedeemerHoldsTdt If true, the calculation assumes that the\n        specified redeemer holds the TDT. If false, the calculation\n        checks the deposit owner against the specified _redeemer. Note\n        that this parameter should be false for all mutating calls to\n        preserve system correctness.\n @return A tuple of the amount the redeemer owes to the deposit to\n         initiate redemption, the amount that is owed to the TDT holder\n         when redemption is initiated, and the amount that is owed to the\n         FRT holder when redemption is initiated.",
            "id": 5032,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateRedemptionTbtcAmounts",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4889,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4884,
                  "name": "_d",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "24941:31:7",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                    "typeString": "struct DepositUtils.Deposit"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4883,
                    "name": "DepositUtils.Deposit",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3893,
                    "src": "24941:20:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                      "typeString": "struct DepositUtils.Deposit"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4886,
                  "name": "_redeemer",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "24982:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4885,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24982:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4888,
                  "name": "_assumeRedeemerHoldsTdt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "25009:28:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4887,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "25009:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24931:112:7"
            },
            "returnParameters": {
              "id": 4896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4891,
                  "name": "owedToDeposit",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "25104:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4890,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25104:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4893,
                  "name": "owedToTdtHolder",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "25139:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4892,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25139:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4895,
                  "name": "owedToFrtHolder",
                  "nodeType": "VariableDeclaration",
                  "scope": 5032,
                  "src": "25176:23:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4894,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25176:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25090:119:7"
            },
            "scope": 5103,
            "src": "24892:2373:7",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5048,
              "nodeType": "Block",
              "src": "27692:97:7",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5041,
                    "name": "_redeemerHoldsTdt",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5036,
                    "src": "27706:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5045,
                  "nodeType": "IfStatement",
                  "src": "27702:56:7",
                  "trueBody": {
                    "id": 5044,
                    "nodeType": "Block",
                    "src": "27725:33:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5042,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "27746:1:7",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 5040,
                        "id": 5043,
                        "nodeType": "Return",
                        "src": "27739:8:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5046,
                    "name": "_lotSize",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5034,
                    "src": "27774:8:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5040,
                  "id": 5047,
                  "nodeType": "Return",
                  "src": "27767:15:7"
                }
              ]
            },
            "documentation": "@notice                    Get the base TBTC amount needed to redeem.\n @param _lotSize   The lot size to use for the base redemption charge.\n @param _redeemerHoldsTdt   True if the redeemer is the TDT holder.\n @return                    The amount in TBTC.",
            "id": 5049,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateBaseRedemptionCharge",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5037,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5034,
                  "name": "_lotSize",
                  "nodeType": "VariableDeclaration",
                  "scope": 5049,
                  "src": "27605:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5033,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27605:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5036,
                  "name": "_redeemerHoldsTdt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5049,
                  "src": "27631:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5035,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "27631:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27595:64:7"
            },
            "returnParameters": {
              "id": 5040,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5039,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5049,
                  "src": "27683:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27683:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27682:9:7"
            },
            "scope": 5103,
            "src": "27557:232:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5101,
              "nodeType": "Block",
              "src": "28485:857:7",
              "statements": [
                {
                  "assignments": [
                    5065
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5065,
                      "name": "escrowRequiresFeeRebate",
                      "nodeType": "VariableDeclaration",
                      "scope": 5101,
                      "src": "28679:28:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5064,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "28679:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5072,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 5066,
                        "name": "_preTerm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5053,
                        "src": "28722:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5067,
                        "name": "_frtExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5055,
                        "src": "28734:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "28722:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "28748:18:7",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 5069,
                        "name": "_redeemerHoldsFrt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5059,
                        "src": "28749:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28722:44:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28679:87:7"
                },
                {
                  "assignments": [
                    5074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5074,
                      "name": "escrowRequiresFee",
                      "nodeType": "VariableDeclaration",
                      "scope": 5101,
                      "src": "28777:22:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5073,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "28777:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5080,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5079,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5077,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 5075,
                        "name": "_preTerm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5053,
                        "src": "28814:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 5076,
                        "name": "_frtExists",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5055,
                        "src": "28994:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "28814:190:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 5078,
                      "name": "_redeemerHoldsTdt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5057,
                      "src": "29095:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "28814:298:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28777:335:7"
                },
                {
                  "assignments": [
                    5082
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5082,
                      "name": "feeEscrow",
                      "nodeType": "VariableDeclaration",
                      "scope": 5101,
                      "src": "29123:17:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5081,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29123:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5084,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 5083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "29143:1:7",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29123:21:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5085,
                    "name": "escrowRequiresFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5074,
                    "src": "29158:17:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5091,
                  "nodeType": "IfStatement",
                  "src": "29154:70:7",
                  "trueBody": {
                    "id": 5090,
                    "nodeType": "Block",
                    "src": "29177:47:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5088,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5086,
                            "name": "feeEscrow",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5082,
                            "src": "29191:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5087,
                            "name": "signerFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5051,
                            "src": "29204:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29191:22:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5089,
                        "nodeType": "ExpressionStatement",
                        "src": "29191:22:7"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 5092,
                    "name": "escrowRequiresFeeRebate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5065,
                    "src": "29237:23:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5098,
                  "nodeType": "IfStatement",
                  "src": "29233:76:7",
                  "trueBody": {
                    "id": 5097,
                    "nodeType": "Block",
                    "src": "29262:47:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5093,
                            "name": "feeEscrow",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5082,
                            "src": "29276:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5094,
                            "name": "signerFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5051,
                            "src": "29289:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29276:22:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5096,
                        "nodeType": "ExpressionStatement",
                        "src": "29276:22:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5099,
                    "name": "feeEscrow",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5082,
                    "src": "29326:9:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5063,
                  "id": 5100,
                  "nodeType": "Return",
                  "src": "29319:16:7"
                }
              ]
            },
            "documentation": "@notice  Get fees owed for redemption\n @param signerFee The value of the signer fee for fee calculations.\n @param _preTerm               True if the Deposit is at-term or in courtesy_call.\n @param _frtExists     True if the FRT exists.\n @param _redeemerHoldsTdt     True if the the redeemer holds the TDT.\n @param _redeemerHoldsFrt     True if the redeemer holds the FRT.\n @return                      The fees owed in TBTC.",
            "id": 5102,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateRedemptionFeeEscrow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5051,
                  "name": "signerFee",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28317:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5050,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28317:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5053,
                  "name": "_preTerm",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28344:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5052,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28344:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5055,
                  "name": "_frtExists",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28367:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5054,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28367:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5057,
                  "name": "_redeemerHoldsTdt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28392:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5056,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28392:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5059,
                  "name": "_redeemerHoldsFrt",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28424:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5058,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "28424:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28307:145:7"
            },
            "returnParameters": {
              "id": 5063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5062,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5102,
                  "src": "28476:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5061,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28476:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28475:9:7"
            },
            "scope": 5103,
            "src": "28270:1072:7",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5104,
        "src": "802:28542:7"
      }
    ],
    "src": "0:29345:7"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositUtils.sol",
      "exportedSymbols": {
        "DepositUtils": [
          5103
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.5",
            ".17"
          ]
        },
        "id": 3780,
        "name": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "attributes": {
          "SourceUnit": 14208,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3781,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3782,
        "name": "ImportDirective",
        "src": "25:80:7"
      },
      {
        "attributes": {
          "SourceUnit": 13217,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3783,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3784,
        "name": "ImportDirective",
        "src": "106:74:7"
      },
      {
        "attributes": {
          "SourceUnit": 13433,
          "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "file": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3785,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3786,
        "name": "ImportDirective",
        "src": "181:74:7"
      },
      {
        "attributes": {
          "SourceUnit": 11429,
          "absolutePath": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
          "file": "@keep-network/keep-ecdsa/contracts/api/IBondedECDSAKeep.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3787,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3788,
        "name": "ImportDirective",
        "src": "256:99:7"
      },
      {
        "attributes": {
          "SourceUnit": 18288,
          "absolutePath": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "file": "openzeppelin-solidity/contracts/token/ERC721/IERC721.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3789,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3790,
        "name": "ImportDirective",
        "src": "356:87:7"
      },
      {
        "attributes": {
          "SourceUnit": 16856,
          "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3791,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3792,
        "name": "ImportDirective",
        "src": "444:75:7"
      },
      {
        "attributes": {
          "SourceUnit": 3779,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/deposit/DepositStates.sol",
          "file": "./DepositStates.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3793,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3794,
        "name": "ImportDirective",
        "src": "520:50:7"
      },
      {
        "attributes": {
          "SourceUnit": 6758,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCConstants.sol",
          "file": "../system/TBTCConstants.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3795,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3796,
        "name": "ImportDirective",
        "src": "571:58:7"
      },
      {
        "attributes": {
          "SourceUnit": 5512,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/interfaces/ITBTCSystem.sol",
          "file": "../interfaces/ITBTCSystem.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3797,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3798,
        "name": "ImportDirective",
        "src": "630:58:7"
      },
      {
        "attributes": {
          "SourceUnit": 8562,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/TBTCToken.sol",
          "file": "../system/TBTCToken.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3799,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3800,
        "name": "ImportDirective",
        "src": "689:50:7"
      },
      {
        "attributes": {
          "SourceUnit": 6301,
          "absolutePath": "/home/runner/work/tbtc/tbtc/solidity/contracts/system/FeeRebateToken.sol",
          "file": "../system/FeeRebateToken.sol",
          "scope": 5104,
          "symbolAliases": [
            {
              "foreign": 3801,
              "local": null
            }
          ],
          "unitAlias": ""
        },
        "id": 3802,
        "name": "ImportDirective",
        "src": "740:60:7"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5103
          ],
          "name": "DepositUtils",
          "scope": 5104
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 16855,
                  "type": "library SafeMath"
                },
                "id": 3803,
                "name": "UserDefinedTypeName",
                "src": "835:8:7"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 3804,
                "name": "ElementaryTypeName",
                "src": "848:7:7"
              }
            ],
            "id": 3805,
            "name": "UsingForDirective",
            "src": "829:27:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 16855,
                  "type": "library SafeMath"
                },
                "id": 3806,
                "name": "UserDefinedTypeName",
                "src": "867:8:7"
              },
              {
                "attributes": {
                  "name": "uint64",
                  "type": "uint64"
                },
                "id": 3807,
                "name": "ElementaryTypeName",
                "src": "880:6:7"
              }
            ],
            "id": 3808,
            "name": "UsingForDirective",
            "src": "861:26:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BytesLib",
                  "referencedDeclaration": 13432,
                  "type": "library BytesLib"
                },
                "id": 3809,
                "name": "UserDefinedTypeName",
                "src": "898:8:7"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 3810,
                "name": "ElementaryTypeName",
                "src": "911:5:7"
              }
            ],
            "id": 3811,
            "name": "UsingForDirective",
            "src": "892:25:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BTCUtils",
                  "referencedDeclaration": 13216,
                  "type": "library BTCUtils"
                },
                "id": 3812,
                "name": "UserDefinedTypeName",
                "src": "928:8:7"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 3813,
                "name": "ElementaryTypeName",
                "src": "941:5:7"
              }
            ],
            "id": 3814,
            "name": "UsingForDirective",
            "src": "922:25:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "BTCUtils",
                  "referencedDeclaration": 13216,
                  "type": "library BTCUtils"
                },
                "id": 3815,
                "name": "UserDefinedTypeName",
                "src": "958:8:7"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 3816,
                "name": "ElementaryTypeName",
                "src": "971:7:7"
              }
            ],
            "id": 3817,
            "name": "UsingForDirective",
            "src": "952:27:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ValidateSPV",
                  "referencedDeclaration": 14207,
                  "type": "library ValidateSPV"
                },
                "id": 3818,
                "name": "UserDefinedTypeName",
                "src": "990:11:7"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 3819,
                "name": "ElementaryTypeName",
                "src": "1006:5:7"
              }
            ],
            "id": 3820,
            "name": "UsingForDirective",
            "src": "984:28:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ValidateSPV",
                  "referencedDeclaration": 14207,
                  "type": "library ValidateSPV"
                },
                "id": 3821,
                "name": "UserDefinedTypeName",
                "src": "1023:11:7"
              },
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 3822,
                "name": "ElementaryTypeName",
                "src": "1039:7:7"
              }
            ],
            "id": 3823,
            "name": "UsingForDirective",
            "src": "1017:30:7"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositStates",
                  "referencedDeclaration": 3778,
                  "type": "library DepositStates"
                },
                "id": 3824,
                "name": "UserDefinedTypeName",
                "src": "1058:13:7"
              },
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DepositUtils.Deposit",
                  "referencedDeclaration": 3893,
                  "type": "struct DepositUtils.Deposit"
                },
                "id": 3825,
                "name": "UserDefinedTypeName",
                "src": "1076:20:7"
              }
            ],
            "id": 3826,
            "name": "UsingForDirective",
            "src": "1052:45:7"
          },
          {
            "attributes": {
              "canonicalName": "DepositUtils.Deposit",
              "name": "Deposit",
              "scope": 5103,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "tbtcSystem",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract ITBTCSystem",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "ITBTCSystem",
                      "referencedDeclaration": 5511,
                      "type": "contract ITBTCSystem"
                    },
                    "id": 3827,
                    "name": "UserDefinedTypeName",
                    "src": "1163:11:7"
                  }
                ],
                "id": 3828,
                "name": "VariableDeclaration",
                "src": "1163:22:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "tbtcToken",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract TBTCToken",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "TBTCToken",
                      "referencedDeclaration": 8561,
                      "type": "contract TBTCToken"
                    },
                    "id": 3829,
                    "name": "UserDefinedTypeName",
                    "src": "1195:9:7"
                  }
                ],
                "id": 3830,
                "name": "VariableDeclaration",
                "src": "1195:19:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "tbtcDepositToken",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract IERC721",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "IERC721",
                      "referencedDeclaration": 18287,
                      "type": "contract IERC721"
                    },
                    "id": 3831,
                    "name": "UserDefinedTypeName",
                    "src": "1224:7:7"
                  }
                ],
                "id": 3832,
                "name": "VariableDeclaration",
                "src": "1224:24:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "feeRebateToken",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract FeeRebateToken",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "FeeRebateToken",
                      "referencedDeclaration": 6300,
                      "type": "contract FeeRebateToken"
                    },
                    "id": 3833,
                    "name": "UserDefinedTypeName",
                    "src": "1258:14:7"
                  }
                ],
                "id": 3834,
                "name": "VariableDeclaration",
                "src": "1258:29:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "vendingMachineAddress",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 3835,
                    "name": "ElementaryTypeName",
                    "src": "1297:7:7"
                  }
                ],
                "id": 3836,
                "name": "VariableDeclaration",
                "src": "1297:29:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "lotSizeSatoshis",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 3837,
                    "name": "ElementaryTypeName",
                    "src": "1336:6:7"
                  }
                ],
                "id": 3838,
                "name": "VariableDeclaration",
                "src": "1336:22:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "currentState",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint8",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint8",
                      "type": "uint8"
                    },
                    "id": 3839,
                    "name": "ElementaryTypeName",
                    "src": "1368:5:7"
                  }
                ],
                "id": 3840,
                "name": "VariableDeclaration",
                "src": "1368:18:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "signerFeeDivisor",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint16",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint16",
                      "type": "uint16"
                    },
                    "id": 3841,
                    "name": "ElementaryTypeName",
                    "src": "1396:6:7"
                  }
                ],
                "id": 3842,
                "name": "VariableDeclaration",
                "src": "1396:23:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "initialCollateralizedPercent",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint16",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint16",
                      "type": "uint16"
                    },
                    "id": 3843,
                    "name": "ElementaryTypeName",
                    "src": "1429:6:7"
                  }
                ],
                "id": 3844,
                "name": "VariableDeclaration",
                "src": "1429:35:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "undercollateralizedThresholdPercent",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint16",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint16",
                      "type": "uint16"
                    },
                    "id": 3845,
                    "name": "ElementaryTypeName",
                    "src": "1474:6:7"
                  }
                ],
                "id": 3846,
                "name": "VariableDeclaration",
                "src": "1474:42:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "severelyUndercollateralizedThresholdPercent",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint16",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint16",
                      "type": "uint16"
                    },
                    "id": 3847,
                    "name": "ElementaryTypeName",
                    "src": "1526:6:7"
                  }
                ],
                "id": 3848,
                "name": "VariableDeclaration",
                "src": "1526:50:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "keepSetupFee",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3849,
                    "name": "ElementaryTypeName",
                    "src": "1586:7:7"
                  }
                ],
                "id": 3850,
                "name": "VariableDeclaration",
                "src": "1586:20:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "liquidationInitiated",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3851,
                    "name": "ElementaryTypeName",
                    "src": "1640:7:7"
                  }
                ],
                "id": 3852,
                "name": "VariableDeclaration",
                "src": "1640:28:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "courtesyCallInitiated",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3853,
                    "name": "ElementaryTypeName",
                    "src": "1718:7:7"
                  }
                ],
                "id": 3854,
                "name": "VariableDeclaration",
                "src": "1718:29:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "liquidationInitiator",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address payable",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "payable",
                      "type": "address payable"
                    },
                    "id": 3855,
                    "name": "ElementaryTypeName",
                    "src": "1793:15:7"
                  }
                ],
                "id": 3856,
                "name": "VariableDeclaration",
                "src": "1793:36:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "keepAddress",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 3857,
                    "name": "ElementaryTypeName",
                    "src": "1881:7:7"
                  }
                ],
                "id": 3858,
                "name": "VariableDeclaration",
                "src": "1881:19:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "signingGroupRequestedAt",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3859,
                    "name": "ElementaryTypeName",
                    "src": "1946:7:7"
                  }
                ],
                "id": 3860,
                "name": "VariableDeclaration",
                "src": "1946:31:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "fundingProofTimerStart",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3861,
                    "name": "ElementaryTypeName",
                    "src": "2070:7:7"
                  }
                ],
                "id": 3862,
                "name": "VariableDeclaration",
                "src": "2070:30:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "signingGroupPubkeyX",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3863,
                    "name": "ElementaryTypeName",
                    "src": "2186:7:7"
                  }
                ],
                "id": 3864,
                "name": "VariableDeclaration",
                "src": "2186:27:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "signingGroupPubkeyY",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3865,
                    "name": "ElementaryTypeName",
                    "src": "2273:7:7"
                  }
                ],
                "id": 3866,
                "name": "VariableDeclaration",
                "src": "2273:27:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "redeemerAddress",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address payable",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "payable",
                      "type": "address payable"
                    },
                    "id": 3867,
                    "name": "ElementaryTypeName",
                    "src": "2408:15:7"
                  }
                ],
                "id": 3868,
                "name": "VariableDeclaration",
                "src": "2408:31:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "redeemerOutputScript",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes",
                      "type": "bytes"
                    },
                    "id": 3869,
                    "name": "ElementaryTypeName",
                    "src": "2517:5:7"
                  }
                ],
                "id": 3870,
                "name": "VariableDeclaration",
                "src": "2517:26:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "initialRedemptionFee",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3871,
                    "name": "ElementaryTypeName",
                    "src": "2583:7:7"
                  }
                ],
                "id": 3872,
                "name": "VariableDeclaration",
                "src": "2583:28:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "latestRedemptionFee",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3873,
                    "name": "ElementaryTypeName",
                    "src": "2653:7:7"
                  }
                ],
                "id": 3874,
                "name": "VariableDeclaration",
                "src": "2653:27:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "withdrawalRequestTime",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3875,
                    "name": "ElementaryTypeName",
                    "src": "2748:7:7"
                  }
                ],
                "id": 3876,
                "name": "VariableDeclaration",
                "src": "2748:29:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "lastRequestedDigest",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3877,
                    "name": "ElementaryTypeName",
                    "src": "2835:7:7"
                  }
                ],
                "id": 3878,
                "name": "VariableDeclaration",
                "src": "2835:27:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "utxoValueBytes",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes8",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes8",
                      "type": "bytes8"
                    },
                    "id": 3879,
                    "name": "ElementaryTypeName",
                    "src": "2960:6:7"
                  }
                ],
                "id": 3880,
                "name": "VariableDeclaration",
                "src": "2960:21:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "fundedAt",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 3881,
                    "name": "ElementaryTypeName",
                    "src": "3044:7:7"
                  }
                ],
                "id": 3882,
                "name": "VariableDeclaration",
                "src": "3044:16:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "utxoOutpoint",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes",
                      "type": "bytes"
                    },
                    "id": 3883,
                    "name": "ElementaryTypeName",
                    "src": "3115:5:7"
                  }
                ],
                "id": 3884,
                "name": "VariableDeclaration",
                "src": "3115:18:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "withdrawableAmounts",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => uint256)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => uint256)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3885,
                        "name": "ElementaryTypeName",
                        "src": "3293:7:7"
                      },
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3886,
                        "name": "ElementaryTypeName",
                        "src": "3304:7:7"
                      }
                    ],
                    "id": 3887,
                    "name": "Mapping",
                    "src": "3285:27:7"
                  }
                ],
                "id": 3888,
                "name": "VariableDeclaration",
                "src": "3285:47:7"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "approvedDigests",
                  "scope": 3893,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(bytes32 => uint256)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(bytes32 => uint256)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3889,
                        "name": "ElementaryTypeName",
                        "src": "3449:7:7"
                      },
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3890,
                        "name": "ElementaryTypeName",
                        "src": "3460:7:7"
                      }
                    ],
                    "id": 3891,
                    "name": "Mapping",
                    "src": "3441:27:7"
                  }
                ],
                "id": 3892,
                "name": "VariableDeclaration",
                "src": "3441:43:7"
              }
            ],
            "id": 3893,
            "name": "StructDefinition",
            "src": "1103:2388:7"
          },
          {
            "attributes": {
              "documentation": "@notice Closes keep associated with the deposit.\n @dev Should be called when the keep is no longer needed and the signing\n group can disband.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "closeKeep",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3911,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3894,
                        "name": "UserDefinedTypeName",
                        "src": "3680:20:7"
                      }
                    ],
                    "id": 3895,
                    "name": "VariableDeclaration",
                    "src": "3680:31:7"
                  }
                ],
                "id": 3896,
                "name": "ParameterList",
                "src": "3679:33:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3897,
                "name": "ParameterList",
                "src": "3722:0:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3899
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_keep",
                          "scope": 3910,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IBondedECDSAKeep",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IBondedECDSAKeep",
                              "referencedDeclaration": 11428,
                              "type": "contract IBondedECDSAKeep"
                            },
                            "id": 3898,
                            "name": "UserDefinedTypeName",
                            "src": "3732:16:7"
                          }
                        ],
                        "id": 3899,
                        "name": "VariableDeclaration",
                        "src": "3732:22:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeep",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11428,
                              "type": "type(contract IBondedECDSAKeep)",
                              "value": "IBondedECDSAKeep"
                            },
                            "id": 3900,
                            "name": "Identifier",
                            "src": "3757:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keepAddress",
                              "referencedDeclaration": 3858,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3895,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 3901,
                                "name": "Identifier",
                                "src": "3774:2:7"
                              }
                            ],
                            "id": 3902,
                            "name": "MemberAccess",
                            "src": "3774:14:7"
                          }
                        ],
                        "id": 3903,
                        "name": "FunctionCall",
                        "src": "3757:32:7"
                      }
                    ],
                    "id": 3904,
                    "name": "VariableDeclarationStatement",
                    "src": "3732:57:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "closeKeep",
                              "referencedDeclaration": 11427,
                              "type": "function () external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3899,
                                  "type": "contract IBondedECDSAKeep",
                                  "value": "_keep"
                                },
                                "id": 3905,
                                "name": "Identifier",
                                "src": "3799:5:7"
                              }
                            ],
                            "id": 3907,
                            "name": "MemberAccess",
                            "src": "3799:15:7"
                          }
                        ],
                        "id": 3908,
                        "name": "FunctionCall",
                        "src": "3799:17:7"
                      }
                    ],
                    "id": 3909,
                    "name": "ExpressionStatement",
                    "src": "3799:17:7"
                  }
                ],
                "id": 3910,
                "name": "Block",
                "src": "3722:101:7"
              }
            ],
            "id": 3911,
            "name": "FunctionDefinition",
            "src": "3661:162:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Gets the current block difficulty.\n @dev            Calls the light relay and gets the current block difficulty.\n @return         The difficulty.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "currentBlockDifficulty",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3924,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3912,
                        "name": "UserDefinedTypeName",
                        "src": "4045:7:7"
                      }
                    ],
                    "id": 3913,
                    "name": "VariableDeclaration",
                    "src": "4045:18:7"
                  }
                ],
                "id": 3914,
                "name": "ParameterList",
                "src": "4044:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3924,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3915,
                        "name": "ElementaryTypeName",
                        "src": "4110:7:7"
                      }
                    ],
                    "id": 3916,
                    "name": "VariableDeclaration",
                    "src": "4110:7:7"
                  }
                ],
                "id": 3917,
                "name": "ParameterList",
                "src": "4109:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3917
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "fetchRelayCurrentDifficulty",
                              "referencedDeclaration": 5459,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcSystem",
                                  "referencedDeclaration": 3828,
                                  "type": "contract ITBTCSystem"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3913,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3918,
                                    "name": "Identifier",
                                    "src": "4140:2:7"
                                  }
                                ],
                                "id": 3919,
                                "name": "MemberAccess",
                                "src": "4140:13:7"
                              }
                            ],
                            "id": 3920,
                            "name": "MemberAccess",
                            "src": "4140:41:7"
                          }
                        ],
                        "id": 3921,
                        "name": "FunctionCall",
                        "src": "4140:43:7"
                      }
                    ],
                    "id": 3922,
                    "name": "Return",
                    "src": "4133:50:7"
                  }
                ],
                "id": 3923,
                "name": "Block",
                "src": "4123:67:7"
              }
            ],
            "id": 3924,
            "name": "FunctionDefinition",
            "src": "4013:177:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Gets the previous block difficulty.\n @dev            Calls the light relay and gets the previous block difficulty.\n @return         The difficulty.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "previousBlockDifficulty",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 3937,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3925,
                        "name": "UserDefinedTypeName",
                        "src": "4415:7:7"
                      }
                    ],
                    "id": 3926,
                    "name": "VariableDeclaration",
                    "src": "4415:18:7"
                  }
                ],
                "id": 3927,
                "name": "ParameterList",
                "src": "4414:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3937,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3928,
                        "name": "ElementaryTypeName",
                        "src": "4480:7:7"
                      }
                    ],
                    "id": 3929,
                    "name": "VariableDeclaration",
                    "src": "4480:7:7"
                  }
                ],
                "id": 3930,
                "name": "ParameterList",
                "src": "4479:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3930
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "fetchRelayPreviousDifficulty",
                              "referencedDeclaration": 5464,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcSystem",
                                  "referencedDeclaration": 3828,
                                  "type": "contract ITBTCSystem"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3926,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 3931,
                                    "name": "Identifier",
                                    "src": "4510:2:7"
                                  }
                                ],
                                "id": 3932,
                                "name": "MemberAccess",
                                "src": "4510:13:7"
                              }
                            ],
                            "id": 3933,
                            "name": "MemberAccess",
                            "src": "4510:42:7"
                          }
                        ],
                        "id": 3934,
                        "name": "FunctionCall",
                        "src": "4510:44:7"
                      }
                    ],
                    "id": 3935,
                    "name": "Return",
                    "src": "4503:51:7"
                  }
                ],
                "id": 3936,
                "name": "Block",
                "src": "4493:68:7"
              }
            ],
            "id": 3937,
            "name": "FunctionDefinition",
            "src": "4382:179:7"
          },
          {
            "attributes": {
              "documentation": "@notice                     Evaluates the header difficulties in a proof.\n @dev                        Uses the light oracle to source recent difficulty.\n @param  _bitcoinHeaders     The header chain to evaluate.\n @return                     True if acceptable, otherwise revert.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "evaluateProofDifficulty",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4036,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 3938,
                        "name": "UserDefinedTypeName",
                        "src": "4918:7:7"
                      }
                    ],
                    "id": 3939,
                    "name": "VariableDeclaration",
                    "src": "4918:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 4036,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 3940,
                        "name": "ElementaryTypeName",
                        "src": "4946:5:7"
                      }
                    ],
                    "id": 3941,
                    "name": "VariableDeclaration",
                    "src": "4946:28:7"
                  }
                ],
                "id": 3942,
                "name": "ParameterList",
                "src": "4908:72:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3943,
                "name": "ParameterList",
                "src": "4993:0:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3945
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_reqDiff",
                          "scope": 4035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3944,
                            "name": "ElementaryTypeName",
                            "src": "5003:7:7"
                          }
                        ],
                        "id": 3945,
                        "name": "VariableDeclaration",
                        "src": "5003:16:7"
                      }
                    ],
                    "id": 3946,
                    "name": "VariableDeclarationStatement",
                    "src": "5003:16:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3948
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_current",
                          "scope": 4035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3947,
                            "name": "ElementaryTypeName",
                            "src": "5029:7:7"
                          }
                        ],
                        "id": 3948,
                        "name": "VariableDeclaration",
                        "src": "5029:16:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3924,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                              "value": "currentBlockDifficulty"
                            },
                            "id": 3949,
                            "name": "Identifier",
                            "src": "5048:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3939,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 3950,
                            "name": "Identifier",
                            "src": "5071:2:7"
                          }
                        ],
                        "id": 3951,
                        "name": "FunctionCall",
                        "src": "5048:26:7"
                      }
                    ],
                    "id": 3952,
                    "name": "VariableDeclarationStatement",
                    "src": "5029:45:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3954
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_previous",
                          "scope": 4035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3953,
                            "name": "ElementaryTypeName",
                            "src": "5084:7:7"
                          }
                        ],
                        "id": 3954,
                        "name": "VariableDeclaration",
                        "src": "5084:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3937,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                              "value": "previousBlockDifficulty"
                            },
                            "id": 3955,
                            "name": "Identifier",
                            "src": "5104:23:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3939,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 3956,
                            "name": "Identifier",
                            "src": "5128:2:7"
                          }
                        ],
                        "id": 3957,
                        "name": "FunctionCall",
                        "src": "5104:27:7"
                      }
                    ],
                    "id": 3958,
                    "name": "VariableDeclarationStatement",
                    "src": "5084:47:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3960
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_firstHeaderDiff",
                          "scope": 4035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3959,
                            "name": "ElementaryTypeName",
                            "src": "5141:7:7"
                          }
                        ],
                        "id": 3960,
                        "name": "VariableDeclaration",
                        "src": "5141:24:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "calculateDifficulty",
                              "referencedDeclaration": 12938,
                              "type": "function (uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "extractTarget",
                                      "referencedDeclaration": 12925,
                                      "type": "function (bytes memory) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3941,
                                          "type": "bytes memory",
                                          "value": "_bitcoinHeaders"
                                        },
                                        "id": 3961,
                                        "name": "Identifier",
                                        "src": "5180:15:7"
                                      }
                                    ],
                                    "id": 3962,
                                    "name": "MemberAccess",
                                    "src": "5180:29:7"
                                  }
                                ],
                                "id": 3963,
                                "name": "FunctionCall",
                                "src": "5180:31:7"
                              }
                            ],
                            "id": 3964,
                            "name": "MemberAccess",
                            "src": "5180:51:7"
                          }
                        ],
                        "id": 3965,
                        "name": "FunctionCall",
                        "src": "5180:53:7"
                      }
                    ],
                    "id": 3966,
                    "name": "VariableDeclarationStatement",
                    "src": "5141:92:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3960,
                              "type": "uint256",
                              "value": "_firstHeaderDiff"
                            },
                            "id": 3967,
                            "name": "Identifier",
                            "src": "5248:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3948,
                              "type": "uint256",
                              "value": "_current"
                            },
                            "id": 3968,
                            "name": "Identifier",
                            "src": "5268:8:7"
                          }
                        ],
                        "id": 3969,
                        "name": "BinaryOperation",
                        "src": "5248:28:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3945,
                                      "type": "uint256",
                                      "value": "_reqDiff"
                                    },
                                    "id": 3970,
                                    "name": "Identifier",
                                    "src": "5292:8:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3948,
                                      "type": "uint256",
                                      "value": "_current"
                                    },
                                    "id": 3971,
                                    "name": "Identifier",
                                    "src": "5303:8:7"
                                  }
                                ],
                                "id": 3972,
                                "name": "Assignment",
                                "src": "5292:19:7"
                              }
                            ],
                            "id": 3973,
                            "name": "ExpressionStatement",
                            "src": "5292:19:7"
                          }
                        ],
                        "id": 3974,
                        "name": "Block",
                        "src": "5278:44:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3960,
                                  "type": "uint256",
                                  "value": "_firstHeaderDiff"
                                },
                                "id": 3975,
                                "name": "Identifier",
                                "src": "5332:16:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3954,
                                  "type": "uint256",
                                  "value": "_previous"
                                },
                                "id": 3976,
                                "name": "Identifier",
                                "src": "5352:9:7"
                              }
                            ],
                            "id": 3977,
                            "name": "BinaryOperation",
                            "src": "5332:29:7"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3945,
                                          "type": "uint256",
                                          "value": "_reqDiff"
                                        },
                                        "id": 3978,
                                        "name": "Identifier",
                                        "src": "5377:8:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3954,
                                          "type": "uint256",
                                          "value": "_previous"
                                        },
                                        "id": 3979,
                                        "name": "Identifier",
                                        "src": "5388:9:7"
                                      }
                                    ],
                                    "id": 3980,
                                    "name": "Assignment",
                                    "src": "5377:20:7"
                                  }
                                ],
                                "id": 3981,
                                "name": "ExpressionStatement",
                                "src": "5377:20:7"
                              }
                            ],
                            "id": 3982,
                            "name": "Block",
                            "src": "5363:45:7"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "tuple()",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_stringliteral_7f8430f268054c270db183e54701a22d56a96d3e1e4978e46b2827d6335275a6",
                                              "typeString": "literal_string \"not at current or previous difficulty\""
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            18365,
                                            18366
                                          ],
                                          "referencedDeclaration": 18366,
                                          "type": "function (string memory) pure",
                                          "value": "revert"
                                        },
                                        "id": 3983,
                                        "name": "Identifier",
                                        "src": "5428:6:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "6e6f742061742063757272656e74206f722070726576696f757320646966666963756c7479",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "string",
                                          "type": "literal_string \"not at current or previous difficulty\"",
                                          "value": "not at current or previous difficulty"
                                        },
                                        "id": 3984,
                                        "name": "Literal",
                                        "src": "5435:39:7"
                                      }
                                    ],
                                    "id": 3985,
                                    "name": "FunctionCall",
                                    "src": "5428:47:7"
                                  }
                                ],
                                "id": 3986,
                                "name": "ExpressionStatement",
                                "src": "5428:47:7"
                              }
                            ],
                            "id": 3987,
                            "name": "Block",
                            "src": "5414:72:7"
                          }
                        ],
                        "id": 3988,
                        "name": "IfStatement",
                        "src": "5328:158:7"
                      }
                    ],
                    "id": 3989,
                    "name": "IfStatement",
                    "src": "5244:242:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        3991
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_observedDiff",
                          "scope": 4035,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 3990,
                            "name": "ElementaryTypeName",
                            "src": "5496:7:7"
                          }
                        ],
                        "id": 3991,
                        "name": "VariableDeclaration",
                        "src": "5496:21:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "validateHeaderChain",
                              "referencedDeclaration": 14148,
                              "type": "function (bytes memory) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3941,
                                  "type": "bytes memory",
                                  "value": "_bitcoinHeaders"
                                },
                                "id": 3992,
                                "name": "Identifier",
                                "src": "5520:15:7"
                              }
                            ],
                            "id": 3993,
                            "name": "MemberAccess",
                            "src": "5520:35:7"
                          }
                        ],
                        "id": 3994,
                        "name": "FunctionCall",
                        "src": "5520:37:7"
                      }
                    ],
                    "id": 3995,
                    "name": "VariableDeclarationStatement",
                    "src": "5496:61:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_92a0405652d516383f1545f4343c46ea0a68cf55d9e795cb647f2b3320f6ea40",
                                  "typeString": "literal_string \"Invalid length of the headers chain\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 3996,
                            "name": "Identifier",
                            "src": "5568:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3991,
                                  "type": "uint256",
                                  "value": "_observedDiff"
                                },
                                "id": 3997,
                                "name": "Identifier",
                                "src": "5589:13:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getErrBadLength",
                                      "referencedDeclaration": 13971,
                                      "type": "function () pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14207,
                                          "type": "type(library ValidateSPV)",
                                          "value": "ValidateSPV"
                                        },
                                        "id": 3998,
                                        "name": "Identifier",
                                        "src": "5606:11:7"
                                      }
                                    ],
                                    "id": 3999,
                                    "name": "MemberAccess",
                                    "src": "5606:27:7"
                                  }
                                ],
                                "id": 4000,
                                "name": "FunctionCall",
                                "src": "5606:29:7"
                              }
                            ],
                            "id": 4001,
                            "name": "BinaryOperation",
                            "src": "5589:46:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e76616c6964206c656e677468206f6620746865206865616465727320636861696e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Invalid length of the headers chain\"",
                              "value": "Invalid length of the headers chain"
                            },
                            "id": 4002,
                            "name": "Literal",
                            "src": "5649:37:7"
                          }
                        ],
                        "id": 4003,
                        "name": "FunctionCall",
                        "src": "5568:128:7"
                      }
                    ],
                    "id": 4004,
                    "name": "ExpressionStatement",
                    "src": "5568:128:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_2c2dfd181269a4c1ce4f235dbe6726e9e20ead12388274c8b22fe08e78db7336",
                                  "typeString": "literal_string \"Invalid headers chain\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4005,
                            "name": "Identifier",
                            "src": "5706:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3991,
                                  "type": "uint256",
                                  "value": "_observedDiff"
                                },
                                "id": 4006,
                                "name": "Identifier",
                                "src": "5727:13:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getErrInvalidChain",
                                      "referencedDeclaration": 13979,
                                      "type": "function () pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14207,
                                          "type": "type(library ValidateSPV)",
                                          "value": "ValidateSPV"
                                        },
                                        "id": 4007,
                                        "name": "Identifier",
                                        "src": "5744:11:7"
                                      }
                                    ],
                                    "id": 4008,
                                    "name": "MemberAccess",
                                    "src": "5744:30:7"
                                  }
                                ],
                                "id": 4009,
                                "name": "FunctionCall",
                                "src": "5744:32:7"
                              }
                            ],
                            "id": 4010,
                            "name": "BinaryOperation",
                            "src": "5727:49:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e76616c6964206865616465727320636861696e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Invalid headers chain\"",
                              "value": "Invalid headers chain"
                            },
                            "id": 4011,
                            "name": "Literal",
                            "src": "5790:23:7"
                          }
                        ],
                        "id": 4012,
                        "name": "FunctionCall",
                        "src": "5706:117:7"
                      }
                    ],
                    "id": 4013,
                    "name": "ExpressionStatement",
                    "src": "5706:117:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_6765317ac58a0bde6edd9b0a77da031b1983fd67bbdbda13051ed89ff1a508c9",
                                  "typeString": "literal_string \"Insufficient work in a header\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4014,
                            "name": "Identifier",
                            "src": "5833:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3991,
                                  "type": "uint256",
                                  "value": "_observedDiff"
                                },
                                "id": 4015,
                                "name": "Identifier",
                                "src": "5854:13:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getErrLowWork",
                                      "referencedDeclaration": 13987,
                                      "type": "function () pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 14207,
                                          "type": "type(library ValidateSPV)",
                                          "value": "ValidateSPV"
                                        },
                                        "id": 4016,
                                        "name": "Identifier",
                                        "src": "5871:11:7"
                                      }
                                    ],
                                    "id": 4017,
                                    "name": "MemberAccess",
                                    "src": "5871:25:7"
                                  }
                                ],
                                "id": 4018,
                                "name": "FunctionCall",
                                "src": "5871:27:7"
                              }
                            ],
                            "id": 4019,
                            "name": "BinaryOperation",
                            "src": "5854:44:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e73756666696369656e7420776f726b20696e206120686561646572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Insufficient work in a header\"",
                              "value": "Insufficient work in a header"
                            },
                            "id": 4020,
                            "name": "Literal",
                            "src": "5912:31:7"
                          }
                        ],
                        "id": 4021,
                        "name": "FunctionCall",
                        "src": "5833:120:7"
                      }
                    ],
                    "id": 4022,
                    "name": "ExpressionStatement",
                    "src": "5833:120:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_783c1ec375fff1301ad34ffc02be448b47c08a18ace7140b3cc0f461b18129c2",
                                  "typeString": "literal_string \"Insufficient accumulated difficulty in header chain\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4023,
                            "name": "Identifier",
                            "src": "5964:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3991,
                                  "type": "uint256",
                                  "value": "_observedDiff"
                                },
                                "id": 4024,
                                "name": "Identifier",
                                "src": "5985:13:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 16808,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3945,
                                          "type": "uint256",
                                          "value": "_reqDiff"
                                        },
                                        "id": 4025,
                                        "name": "Identifier",
                                        "src": "6018:8:7"
                                      }
                                    ],
                                    "id": 4026,
                                    "name": "MemberAccess",
                                    "src": "6018:12:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "getTxProofDifficultyFactor",
                                          "referencedDeclaration": 6684,
                                          "type": "function () pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6757,
                                              "type": "type(library TBTCConstants)",
                                              "value": "TBTCConstants"
                                            },
                                            "id": 4027,
                                            "name": "Identifier",
                                            "src": "6031:13:7"
                                          }
                                        ],
                                        "id": 4028,
                                        "name": "MemberAccess",
                                        "src": "6031:40:7"
                                      }
                                    ],
                                    "id": 4029,
                                    "name": "FunctionCall",
                                    "src": "6031:42:7"
                                  }
                                ],
                                "id": 4030,
                                "name": "FunctionCall",
                                "src": "6018:56:7"
                              }
                            ],
                            "id": 4031,
                            "name": "BinaryOperation",
                            "src": "5985:89:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e73756666696369656e7420616363756d756c6174656420646966666963756c747920696e2068656164657220636861696e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Insufficient accumulated difficulty in header chain\"",
                              "value": "Insufficient accumulated difficulty in header chain"
                            },
                            "id": 4032,
                            "name": "Literal",
                            "src": "6088:53:7"
                          }
                        ],
                        "id": 4033,
                        "name": "FunctionCall",
                        "src": "5964:187:7"
                      }
                    ],
                    "id": 4034,
                    "name": "ExpressionStatement",
                    "src": "5964:187:7"
                  }
                ],
                "id": 4035,
                "name": "Block",
                "src": "4993:1165:7"
              }
            ],
            "id": 4036,
            "name": "FunctionDefinition",
            "src": "4876:1282:7"
          },
          {
            "attributes": {
              "documentation": "@notice                 Syntactically check an SPV proof for a bitcoin transaction with its hash (ID).\n @dev                    Stateless SPV Proof verification documented elsewhere (see https://github.com/summa-tx/bitcoin-spv).\n @param _d               Deposit storage pointer.\n @param _txId            The bitcoin txid of the tx that is purportedly included in the header chain.\n @param _merkleProof     The merkle proof of inclusion of the tx in the bitcoin block.\n @param _txIndexInBlock  The index of the tx in the Bitcoin block (0-indexed).\n @param _bitcoinHeaders  An array of tightly-packed bitcoin headers.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "checkProofFromTxId",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4069,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4037,
                        "name": "UserDefinedTypeName",
                        "src": "6867:7:7"
                      }
                    ],
                    "id": 4038,
                    "name": "VariableDeclaration",
                    "src": "6867:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txId",
                      "scope": 4069,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4039,
                        "name": "ElementaryTypeName",
                        "src": "6895:7:7"
                      }
                    ],
                    "id": 4040,
                    "name": "VariableDeclaration",
                    "src": "6895:13:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 4069,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4041,
                        "name": "ElementaryTypeName",
                        "src": "6918:5:7"
                      }
                    ],
                    "id": 4042,
                    "name": "VariableDeclaration",
                    "src": "6918:25:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 4069,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4043,
                        "name": "ElementaryTypeName",
                        "src": "6953:7:7"
                      }
                    ],
                    "id": 4044,
                    "name": "VariableDeclaration",
                    "src": "6953:23:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 4069,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4045,
                        "name": "ElementaryTypeName",
                        "src": "6986:5:7"
                      }
                    ],
                    "id": 4046,
                    "name": "VariableDeclaration",
                    "src": "6986:28:7"
                  }
                ],
                "id": 4047,
                "name": "ParameterList",
                "src": "6857:163:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4048,
                "name": "ParameterList",
                "src": "7033:0:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_fa0f14e2ad906f9659e2f553b0115063768d6742a6e662f2ff5474f48e8b2911",
                                  "typeString": "literal_string \"Tx merkle proof is not valid for provided header and txId\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4049,
                            "name": "Identifier",
                            "src": "7043:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "prove",
                                  "referencedDeclaration": 14031,
                                  "type": "function (bytes32,bytes32,bytes memory,uint256) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4040,
                                      "type": "bytes32",
                                      "value": "_txId"
                                    },
                                    "id": 4050,
                                    "name": "Identifier",
                                    "src": "7064:5:7"
                                  }
                                ],
                                "id": 4051,
                                "name": "MemberAccess",
                                "src": "7064:11:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toBytes32",
                                      "referencedDeclaration": 13400,
                                      "type": "function (bytes memory) pure returns (bytes32)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "extractMerkleRootLE",
                                              "referencedDeclaration": 12880,
                                              "type": "function (bytes memory) pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4046,
                                                  "type": "bytes memory",
                                                  "value": "_bitcoinHeaders"
                                                },
                                                "id": 4052,
                                                "name": "Identifier",
                                                "src": "7093:15:7"
                                              }
                                            ],
                                            "id": 4053,
                                            "name": "MemberAccess",
                                            "src": "7093:35:7"
                                          }
                                        ],
                                        "id": 4054,
                                        "name": "FunctionCall",
                                        "src": "7093:37:7"
                                      }
                                    ],
                                    "id": 4055,
                                    "name": "MemberAccess",
                                    "src": "7093:47:7"
                                  }
                                ],
                                "id": 4056,
                                "name": "FunctionCall",
                                "src": "7093:49:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4042,
                                  "type": "bytes memory",
                                  "value": "_merkleProof"
                                },
                                "id": 4057,
                                "name": "Identifier",
                                "src": "7160:12:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4044,
                                  "type": "uint256",
                                  "value": "_txIndexInBlock"
                                },
                                "id": 4058,
                                "name": "Identifier",
                                "src": "7190:15:7"
                              }
                            ],
                            "id": 4059,
                            "name": "FunctionCall",
                            "src": "7064:155:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f722070726f76696465642068656164657220616e642074784964",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Tx merkle proof is not valid for provided header and txId\"",
                              "value": "Tx merkle proof is not valid for provided header and txId"
                            },
                            "id": 4060,
                            "name": "Literal",
                            "src": "7233:59:7"
                          }
                        ],
                        "id": 4061,
                        "name": "FunctionCall",
                        "src": "7043:259:7"
                      }
                    ],
                    "id": 4062,
                    "name": "ExpressionStatement",
                    "src": "7043:259:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4036,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory) view",
                              "value": "evaluateProofDifficulty"
                            },
                            "id": 4063,
                            "name": "Identifier",
                            "src": "7312:23:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4038,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 4064,
                            "name": "Identifier",
                            "src": "7336:2:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4046,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 4065,
                            "name": "Identifier",
                            "src": "7340:15:7"
                          }
                        ],
                        "id": 4066,
                        "name": "FunctionCall",
                        "src": "7312:44:7"
                      }
                    ],
                    "id": 4067,
                    "name": "ExpressionStatement",
                    "src": "7312:44:7"
                  }
                ],
                "id": 4068,
                "name": "Block",
                "src": "7033:330:7"
              }
            ],
            "id": 4069,
            "name": "FunctionDefinition",
            "src": "6830:533:7"
          },
          {
            "attributes": {
              "documentation": "@notice                     Find and validate funding output in transaction output vector using the index.\n @dev                        Gets `_fundingOutputIndex` output from the output vector and validates if it is\n                             a p2wpkh output with public key hash matching this deposit's public key hash.\n @param _d                   Deposit storage pointer.\n @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC outputs.\n @param _fundingOutputIndex  Index of funding output in _txOutputVector.\n @return                     Funding value.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "findAndParseFundingOutput",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4150,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4070,
                        "name": "UserDefinedTypeName",
                        "src": "8084:20:7"
                      }
                    ],
                    "id": 4071,
                    "name": "VariableDeclaration",
                    "src": "8084:31:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 4150,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4072,
                        "name": "ElementaryTypeName",
                        "src": "8125:5:7"
                      }
                    ],
                    "id": 4073,
                    "name": "VariableDeclaration",
                    "src": "8125:28:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fundingOutputIndex",
                      "scope": 4150,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 4074,
                        "name": "ElementaryTypeName",
                        "src": "8163:5:7"
                      }
                    ],
                    "id": 4075,
                    "name": "VariableDeclaration",
                    "src": "8163:25:7"
                  }
                ],
                "id": 4076,
                "name": "ParameterList",
                "src": "8074:120:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4150,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 4077,
                        "name": "ElementaryTypeName",
                        "src": "8216:6:7"
                      }
                    ],
                    "id": 4078,
                    "name": "VariableDeclaration",
                    "src": "8216:6:7"
                  }
                ],
                "id": 4079,
                "name": "ParameterList",
                "src": "8215:8:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4081
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_valueBytes",
                          "scope": 4149,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes8",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes8",
                              "type": "bytes8"
                            },
                            "id": 4080,
                            "name": "ElementaryTypeName",
                            "src": "8234:6:7"
                          }
                        ],
                        "id": 4081,
                        "name": "VariableDeclaration",
                        "src": "8234:18:7"
                      }
                    ],
                    "id": 4082,
                    "name": "VariableDeclarationStatement",
                    "src": "8234:18:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4084
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_output",
                          "scope": 4149,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 4083,
                            "name": "ElementaryTypeName",
                            "src": "8262:5:7"
                          }
                        ],
                        "id": 4084,
                        "name": "VariableDeclaration",
                        "src": "8262:20:7"
                      }
                    ],
                    "id": 4085,
                    "name": "VariableDeclarationStatement",
                    "src": "8262:20:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4084,
                              "type": "bytes memory",
                              "value": "_output"
                            },
                            "id": 4086,
                            "name": "Identifier",
                            "src": "8342:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "extractOutputAtIndex",
                                  "referencedDeclaration": 12456,
                                  "type": "function (bytes memory,uint256) pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4073,
                                      "type": "bytes memory",
                                      "value": "_txOutputVector"
                                    },
                                    "id": 4087,
                                    "name": "Identifier",
                                    "src": "8352:15:7"
                                  }
                                ],
                                "id": 4088,
                                "name": "MemberAccess",
                                "src": "8352:36:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4075,
                                  "type": "uint8",
                                  "value": "_fundingOutputIndex"
                                },
                                "id": 4089,
                                "name": "Identifier",
                                "src": "8389:19:7"
                              }
                            ],
                            "id": 4090,
                            "name": "FunctionCall",
                            "src": "8352:57:7"
                          }
                        ],
                        "id": 4091,
                        "name": "Assignment",
                        "src": "8342:67:7"
                      }
                    ],
                    "id": 4092,
                    "name": "ExpressionStatement",
                    "src": "8342:67:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ce299c5aff9573702998bb1a5d486c01e568cca589b4d6d69f8b5015ae45b327",
                                  "typeString": "literal_string \"Could not identify output funding the required public key hash\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4093,
                            "name": "Identifier",
                            "src": "8420:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 4094,
                                    "name": "Identifier",
                                    "src": "8441:9:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "extractHash",
                                          "referencedDeclaration": 12682,
                                          "type": "function (bytes memory) pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4084,
                                              "type": "bytes memory",
                                              "value": "_output"
                                            },
                                            "id": 4095,
                                            "name": "Identifier",
                                            "src": "8451:7:7"
                                          }
                                        ],
                                        "id": 4096,
                                        "name": "MemberAccess",
                                        "src": "8451:19:7"
                                      }
                                    ],
                                    "id": 4097,
                                    "name": "FunctionCall",
                                    "src": "8451:21:7"
                                  }
                                ],
                                "id": 4098,
                                "name": "FunctionCall",
                                "src": "8441:32:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18354,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 4099,
                                    "name": "Identifier",
                                    "src": "8493:9:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes20",
                                              "typeString": "bytes20"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "referencedDeclaration": null,
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18347,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 4100,
                                            "name": "Identifier",
                                            "src": "8503:3:7"
                                          }
                                        ],
                                        "id": 4101,
                                        "name": "MemberAccess",
                                        "src": "8503:16:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes20",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4458,
                                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)",
                                              "value": "signerPKH"
                                            },
                                            "id": 4102,
                                            "name": "Identifier",
                                            "src": "8520:9:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4071,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 4103,
                                            "name": "Identifier",
                                            "src": "8530:2:7"
                                          }
                                        ],
                                        "id": 4104,
                                        "name": "FunctionCall",
                                        "src": "8520:13:7"
                                      }
                                    ],
                                    "id": 4105,
                                    "name": "FunctionCall",
                                    "src": "8503:31:7"
                                  }
                                ],
                                "id": 4106,
                                "name": "FunctionCall",
                                "src": "8493:42:7"
                              }
                            ],
                            "id": 4107,
                            "name": "BinaryOperation",
                            "src": "8441:94:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "436f756c64206e6f74206964656e74696679206f75747075742066756e64696e6720746865207265717569726564207075626c6963206b65792068617368",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Could not identify output funding the required public key hash\"",
                              "value": "Could not identify output funding the required public key hash"
                            },
                            "id": 4108,
                            "name": "Literal",
                            "src": "8549:64:7"
                          }
                        ],
                        "id": 4109,
                        "name": "FunctionCall",
                        "src": "8420:203:7"
                      }
                    ],
                    "id": 4110,
                    "name": "ExpressionStatement",
                    "src": "8420:203:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4820ad1149d759871ed9ed9bb7eb6d4967f0182469b44cf4300cddfd9c3e83ea",
                                  "typeString": "literal_string \"Funding transaction output type unsupported: only p2wpkh outputs are supported\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4111,
                            "name": "Identifier",
                            "src": "8633:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4084,
                                          "type": "bytes memory",
                                          "value": "_output"
                                        },
                                        "id": 4112,
                                        "name": "Identifier",
                                        "src": "8654:7:7"
                                      }
                                    ],
                                    "id": 4113,
                                    "name": "MemberAccess",
                                    "src": "8654:14:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3331",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 31",
                                      "value": "31"
                                    },
                                    "id": 4114,
                                    "name": "Literal",
                                    "src": "8672:2:7"
                                  }
                                ],
                                "id": 4115,
                                "name": "BinaryOperation",
                                "src": "8654:20:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_8_by_1",
                                              "typeString": "int_const 8"
                                            },
                                            {
                                              "typeIdentifier": "t_rational_23_by_1",
                                              "typeString": "int_const 23"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "keccak256Slice",
                                          "referencedDeclaration": 13431,
                                          "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4084,
                                              "type": "bytes memory",
                                              "value": "_output"
                                            },
                                            "id": 4116,
                                            "name": "Identifier",
                                            "src": "8694:7:7"
                                          }
                                        ],
                                        "id": 4117,
                                        "name": "MemberAccess",
                                        "src": "8694:22:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "38",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 8",
                                          "value": "8"
                                        },
                                        "id": 4118,
                                        "name": "Literal",
                                        "src": "8717:1:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3233",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 23",
                                          "value": "23"
                                        },
                                        "id": 4119,
                                        "name": "Literal",
                                        "src": "8720:2:7"
                                      }
                                    ],
                                    "id": 4120,
                                    "name": "FunctionCall",
                                    "src": "8694:29:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes32",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18354,
                                          "type": "function (bytes memory) pure returns (bytes32)",
                                          "value": "keccak256"
                                        },
                                        "id": 4121,
                                        "name": "Identifier",
                                        "src": "8743:9:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_stringliteral_bde11925feafe00f4d9d48ef4480be1ea68d808b9c557770a6133e20d41f44bf",
                                                  "typeString": "literal_string \"\u0016\u0000\u0014\""
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes20",
                                                  "typeString": "bytes20"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "encodePacked",
                                              "referencedDeclaration": null,
                                              "type": "function () pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 18347,
                                                  "type": "abi",
                                                  "value": "abi"
                                                },
                                                "id": 4122,
                                                "name": "Identifier",
                                                "src": "8753:3:7"
                                              }
                                            ],
                                            "id": 4123,
                                            "name": "MemberAccess",
                                            "src": "8753:16:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "160014",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "string",
                                              "type": "literal_string \"\u0016\u0000\u0014\"",
                                              "value": "\u0016\u0000\u0014"
                                            },
                                            "id": 4124,
                                            "name": "Literal",
                                            "src": "8770:11:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "bytes20",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4458,
                                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bytes20)",
                                                  "value": "signerPKH"
                                                },
                                                "id": 4125,
                                                "name": "Identifier",
                                                "src": "8783:9:7"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4071,
                                                  "type": "struct DepositUtils.Deposit storage pointer",
                                                  "value": "_d"
                                                },
                                                "id": 4126,
                                                "name": "Identifier",
                                                "src": "8793:2:7"
                                              }
                                            ],
                                            "id": 4127,
                                            "name": "FunctionCall",
                                            "src": "8783:13:7"
                                          }
                                        ],
                                        "id": 4128,
                                        "name": "FunctionCall",
                                        "src": "8753:44:7"
                                      }
                                    ],
                                    "id": 4129,
                                    "name": "FunctionCall",
                                    "src": "8743:55:7"
                                  }
                                ],
                                "id": 4130,
                                "name": "BinaryOperation",
                                "src": "8694:104:7"
                              }
                            ],
                            "id": 4131,
                            "name": "BinaryOperation",
                            "src": "8654:144:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "46756e64696e67207472616e73616374696f6e206f7574707574207479706520756e737570706f727465643a206f6e6c7920703277706b68206f7574707574732061726520737570706f72746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Funding transaction output type unsupported: only p2wpkh outputs are supported\"",
                              "value": "Funding transaction output type unsupported: only p2wpkh outputs are supported"
                            },
                            "id": 4132,
                            "name": "Literal",
                            "src": "8812:80:7"
                          }
                        ],
                        "id": 4133,
                        "name": "FunctionCall",
                        "src": "8633:269:7"
                      }
                    ],
                    "id": 4134,
                    "name": "ExpressionStatement",
                    "src": "8633:269:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4081,
                              "type": "bytes8",
                              "value": "_valueBytes"
                            },
                            "id": 4135,
                            "name": "Identifier",
                            "src": "8913:11:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes8",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes8)",
                                  "value": "bytes8"
                                },
                                "id": 4136,
                                "name": "ElementaryTypeNameExpression",
                                "src": "8927:6:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toBytes32",
                                      "referencedDeclaration": 13400,
                                      "type": "function (bytes memory) pure returns (bytes32)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_0_by_1",
                                                  "typeString": "int_const 0"
                                                },
                                                {
                                                  "typeIdentifier": "t_rational_8_by_1",
                                                  "typeString": "int_const 8"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "slice",
                                              "referencedDeclaration": 13281,
                                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4084,
                                                  "type": "bytes memory",
                                                  "value": "_output"
                                                },
                                                "id": 4137,
                                                "name": "Identifier",
                                                "src": "8934:7:7"
                                              }
                                            ],
                                            "id": 4138,
                                            "name": "MemberAccess",
                                            "src": "8934:13:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "30",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 0",
                                              "value": "0"
                                            },
                                            "id": 4139,
                                            "name": "Literal",
                                            "src": "8948:1:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "38",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 8",
                                              "value": "8"
                                            },
                                            "id": 4140,
                                            "name": "Literal",
                                            "src": "8951:1:7"
                                          }
                                        ],
                                        "id": 4141,
                                        "name": "FunctionCall",
                                        "src": "8934:19:7"
                                      }
                                    ],
                                    "id": 4142,
                                    "name": "MemberAccess",
                                    "src": "8934:29:7"
                                  }
                                ],
                                "id": 4143,
                                "name": "FunctionCall",
                                "src": "8934:31:7"
                              }
                            ],
                            "id": 4144,
                            "name": "FunctionCall",
                            "src": "8927:39:7"
                          }
                        ],
                        "id": 4145,
                        "name": "Assignment",
                        "src": "8913:53:7"
                      }
                    ],
                    "id": 4146,
                    "name": "ExpressionStatement",
                    "src": "8913:53:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4079
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4081,
                          "type": "bytes8",
                          "value": "_valueBytes"
                        },
                        "id": 4147,
                        "name": "Identifier",
                        "src": "8983:11:7"
                      }
                    ],
                    "id": 4148,
                    "name": "Return",
                    "src": "8976:18:7"
                  }
                ],
                "id": 4149,
                "name": "Block",
                "src": "8224:777:7"
              }
            ],
            "id": 4150,
            "name": "FunctionDefinition",
            "src": "8040:961:7"
          },
          {
            "attributes": {
              "documentation": "@notice                     Validates the funding tx and parses information from it.\n @dev                        Takes a pre-parsed transaction and calculates values needed to verify funding.\n @param  _d                  Deposit storage pointer.\n @param _txVersion           Transaction version number (4-byte LE).\n @param _txInputVector       All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.\n @param _txOutputVector      All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.\n @param _txLocktime          Final 4 bytes of the transaction.\n @param _fundingOutputIndex  Index of funding output in _txOutputVector (0-indexed).\n @param _merkleProof         The merkle proof of transaction inclusion in a block.\n @param _txIndexInBlock      Transaction index in the block (0-indexed).\n @param _bitcoinHeaders      Single bytestring of 80-byte bitcoin headers, lowest height first.\n @return                     The 8-byte LE UTXO size in satoshi, the 36byte outpoint.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "validateAndParseFundingSPVProof",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4151,
                        "name": "UserDefinedTypeName",
                        "src": "10205:20:7"
                      }
                    ],
                    "id": 4152,
                    "name": "VariableDeclaration",
                    "src": "10205:31:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txVersion",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 4153,
                        "name": "ElementaryTypeName",
                        "src": "10246:6:7"
                      }
                    ],
                    "id": 4154,
                    "name": "VariableDeclaration",
                    "src": "10246:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txInputVector",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4155,
                        "name": "ElementaryTypeName",
                        "src": "10273:5:7"
                      }
                    ],
                    "id": 4156,
                    "name": "VariableDeclaration",
                    "src": "10273:27:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txOutputVector",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4157,
                        "name": "ElementaryTypeName",
                        "src": "10310:5:7"
                      }
                    ],
                    "id": 4158,
                    "name": "VariableDeclaration",
                    "src": "10310:28:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txLocktime",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 4159,
                        "name": "ElementaryTypeName",
                        "src": "10348:6:7"
                      }
                    ],
                    "id": 4160,
                    "name": "VariableDeclaration",
                    "src": "10348:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_fundingOutputIndex",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint8",
                          "type": "uint8"
                        },
                        "id": 4161,
                        "name": "ElementaryTypeName",
                        "src": "10376:5:7"
                      }
                    ],
                    "id": 4162,
                    "name": "VariableDeclaration",
                    "src": "10376:25:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_merkleProof",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4163,
                        "name": "ElementaryTypeName",
                        "src": "10411:5:7"
                      }
                    ],
                    "id": 4164,
                    "name": "VariableDeclaration",
                    "src": "10411:25:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_txIndexInBlock",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4165,
                        "name": "ElementaryTypeName",
                        "src": "10446:7:7"
                      }
                    ],
                    "id": 4166,
                    "name": "VariableDeclaration",
                    "src": "10446:23:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bitcoinHeaders",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4167,
                        "name": "ElementaryTypeName",
                        "src": "10479:5:7"
                      }
                    ],
                    "id": 4168,
                    "name": "VariableDeclaration",
                    "src": "10479:28:7"
                  }
                ],
                "id": 4169,
                "name": "ParameterList",
                "src": "10195:318:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_valueBytes",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 4170,
                        "name": "ElementaryTypeName",
                        "src": "10535:6:7"
                      }
                    ],
                    "id": 4171,
                    "name": "VariableDeclaration",
                    "src": "10535:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_utxoOutpoint",
                      "scope": 4237,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4172,
                        "name": "ElementaryTypeName",
                        "src": "10555:5:7"
                      }
                    ],
                    "id": 4173,
                    "name": "VariableDeclaration",
                    "src": "10555:26:7"
                  }
                ],
                "id": 4174,
                "name": "ParameterList",
                "src": "10534:48:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_50569d922bdc14a5fab9eaf6cfc2b8f7434918cbe4e7c29ccc434b2a080a8a82",
                                  "typeString": "literal_string \"invalid input vector provided\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4175,
                            "name": "Identifier",
                            "src": "10650:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVin",
                                  "referencedDeclaration": 12774,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4156,
                                      "type": "bytes memory",
                                      "value": "_txInputVector"
                                    },
                                    "id": 4176,
                                    "name": "Identifier",
                                    "src": "10658:14:7"
                                  }
                                ],
                                "id": 4177,
                                "name": "MemberAccess",
                                "src": "10658:26:7"
                              }
                            ],
                            "id": 4178,
                            "name": "FunctionCall",
                            "src": "10658:28:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "696e76616c696420696e70757420766563746f722070726f7669646564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"invalid input vector provided\"",
                              "value": "invalid input vector provided"
                            },
                            "id": 4179,
                            "name": "Literal",
                            "src": "10688:31:7"
                          }
                        ],
                        "id": 4180,
                        "name": "FunctionCall",
                        "src": "10650:70:7"
                      }
                    ],
                    "id": 4181,
                    "name": "ExpressionStatement",
                    "src": "10650:70:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a33d06f17f9a7037734a39e63c195f479a3381b57e1fdb94340fd16475711edf",
                                  "typeString": "literal_string \"invalid output vector provided\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4182,
                            "name": "Identifier",
                            "src": "10730:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "validateVout",
                                  "referencedDeclaration": 12866,
                                  "type": "function (bytes memory) pure returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4158,
                                      "type": "bytes memory",
                                      "value": "_txOutputVector"
                                    },
                                    "id": 4183,
                                    "name": "Identifier",
                                    "src": "10751:15:7"
                                  }
                                ],
                                "id": 4184,
                                "name": "MemberAccess",
                                "src": "10751:28:7"
                              }
                            ],
                            "id": 4185,
                            "name": "FunctionCall",
                            "src": "10751:30:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "696e76616c6964206f757470757420766563746f722070726f7669646564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"invalid output vector provided\"",
                              "value": "invalid output vector provided"
                            },
                            "id": 4186,
                            "name": "Literal",
                            "src": "10795:32:7"
                          }
                        ],
                        "id": 4187,
                        "name": "FunctionCall",
                        "src": "10730:107:7"
                      }
                    ],
                    "id": 4188,
                    "name": "ExpressionStatement",
                    "src": "10730:107:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4190
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "txID",
                          "scope": 4236,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4189,
                            "name": "ElementaryTypeName",
                            "src": "10848:7:7"
                          }
                        ],
                        "id": 4190,
                        "name": "VariableDeclaration",
                        "src": "10848:12:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash256",
                              "referencedDeclaration": 11851,
                              "type": "function (bytes memory) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18347,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 4191,
                                        "name": "Identifier",
                                        "src": "10875:3:7"
                                      }
                                    ],
                                    "id": 4192,
                                    "name": "MemberAccess",
                                    "src": "10875:33:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4154,
                                      "type": "bytes4",
                                      "value": "_txVersion"
                                    },
                                    "id": 4193,
                                    "name": "Identifier",
                                    "src": "10926:10:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4156,
                                      "type": "bytes memory",
                                      "value": "_txInputVector"
                                    },
                                    "id": 4194,
                                    "name": "Identifier",
                                    "src": "10954:14:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4158,
                                      "type": "bytes memory",
                                      "value": "_txOutputVector"
                                    },
                                    "id": 4195,
                                    "name": "Identifier",
                                    "src": "10986:15:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4160,
                                      "type": "bytes4",
                                      "value": "_txLocktime"
                                    },
                                    "id": 4196,
                                    "name": "Identifier",
                                    "src": "11019:11:7"
                                  }
                                ],
                                "id": 4197,
                                "name": "FunctionCall",
                                "src": "10875:169:7"
                              }
                            ],
                            "id": 4198,
                            "name": "MemberAccess",
                            "src": "10875:194:7"
                          }
                        ],
                        "id": 4199,
                        "name": "FunctionCall",
                        "src": "10875:196:7"
                      }
                    ],
                    "id": 4200,
                    "name": "VariableDeclarationStatement",
                    "src": "10848:223:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes8"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4171,
                              "type": "bytes8",
                              "value": "_valueBytes"
                            },
                            "id": 4201,
                            "name": "Identifier",
                            "src": "11082:11:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes8",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4150,
                                  "type": "function (struct DepositUtils.Deposit storage pointer,bytes memory,uint8) view returns (bytes8)",
                                  "value": "findAndParseFundingOutput"
                                },
                                "id": 4202,
                                "name": "Identifier",
                                "src": "11096:25:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4152,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4203,
                                "name": "Identifier",
                                "src": "11135:2:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4158,
                                  "type": "bytes memory",
                                  "value": "_txOutputVector"
                                },
                                "id": 4204,
                                "name": "Identifier",
                                "src": "11151:15:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4162,
                                  "type": "uint8",
                                  "value": "_fundingOutputIndex"
                                },
                                "id": 4205,
                                "name": "Identifier",
                                "src": "11180:19:7"
                              }
                            ],
                            "id": 4206,
                            "name": "FunctionCall",
                            "src": "11096:113:7"
                          }
                        ],
                        "id": 4207,
                        "name": "Assignment",
                        "src": "11082:127:7"
                      }
                    ],
                    "id": 4208,
                    "name": "ExpressionStatement",
                    "src": "11082:127:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_e47e4d4019fbc3201dd7924d57a3f1daa90e6a7f83fef433220dabdb84cceb65",
                                  "typeString": "literal_string \"Deposit too small\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4209,
                            "name": "Identifier",
                            "src": "11220:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes8",
                                          "typeString": "bytes8"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4520,
                                      "type": "function (bytes8) pure returns (uint256)",
                                      "value": "bytes8LEToUint"
                                    },
                                    "id": 4210,
                                    "name": "Identifier",
                                    "src": "11241:14:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4171,
                                      "type": "bytes8",
                                      "value": "_valueBytes"
                                    },
                                    "id": 4211,
                                    "name": "Identifier",
                                    "src": "11256:11:7"
                                  }
                                ],
                                "id": 4212,
                                "name": "FunctionCall",
                                "src": "11241:27:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "lotSizeSatoshis",
                                  "referencedDeclaration": 3838,
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4152,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4213,
                                    "name": "Identifier",
                                    "src": "11272:2:7"
                                  }
                                ],
                                "id": 4214,
                                "name": "MemberAccess",
                                "src": "11272:18:7"
                              }
                            ],
                            "id": 4215,
                            "name": "BinaryOperation",
                            "src": "11241:49:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420746f6f20736d616c6c",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit too small\"",
                              "value": "Deposit too small"
                            },
                            "id": 4216,
                            "name": "Literal",
                            "src": "11304:19:7"
                          }
                        ],
                        "id": 4217,
                        "name": "FunctionCall",
                        "src": "11220:113:7"
                      }
                    ],
                    "id": 4218,
                    "name": "ExpressionStatement",
                    "src": "11220:113:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4069,
                              "type": "function (struct DepositUtils.Deposit storage pointer,bytes32,bytes memory,uint256,bytes memory) view",
                              "value": "checkProofFromTxId"
                            },
                            "id": 4219,
                            "name": "Identifier",
                            "src": "11344:18:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4152,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 4220,
                            "name": "Identifier",
                            "src": "11376:2:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4190,
                              "type": "bytes32",
                              "value": "txID"
                            },
                            "id": 4221,
                            "name": "Identifier",
                            "src": "11392:4:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4164,
                              "type": "bytes memory",
                              "value": "_merkleProof"
                            },
                            "id": 4222,
                            "name": "Identifier",
                            "src": "11410:12:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4166,
                              "type": "uint256",
                              "value": "_txIndexInBlock"
                            },
                            "id": 4223,
                            "name": "Identifier",
                            "src": "11436:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4168,
                              "type": "bytes memory",
                              "value": "_bitcoinHeaders"
                            },
                            "id": 4224,
                            "name": "Identifier",
                            "src": "11465:15:7"
                          }
                        ],
                        "id": 4225,
                        "name": "FunctionCall",
                        "src": "11344:146:7"
                      }
                    ],
                    "id": 4226,
                    "name": "ExpressionStatement",
                    "src": "11344:146:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4173,
                              "type": "bytes memory",
                              "value": "_utxoOutpoint"
                            },
                            "id": 4227,
                            "name": "Identifier",
                            "src": "11708:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_99ff0d9125e1fc9531a11262e15aeb2c60509a078c4cc4c64cefdfb06ff68647",
                                      "typeString": "literal_string \"\u0000\u0000\u0000\""
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodePacked",
                                  "referencedDeclaration": null,
                                  "type": "function () pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18347,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 4228,
                                    "name": "Identifier",
                                    "src": "11724:3:7"
                                  }
                                ],
                                "id": 4229,
                                "name": "MemberAccess",
                                "src": "11724:16:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4190,
                                  "type": "bytes32",
                                  "value": "txID"
                                },
                                "id": 4230,
                                "name": "Identifier",
                                "src": "11754:4:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4162,
                                  "type": "uint8",
                                  "value": "_fundingOutputIndex"
                                },
                                "id": 4231,
                                "name": "Identifier",
                                "src": "11772:19:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "000000",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"\u0000\u0000\u0000\"",
                                  "value": "\u0000\u0000\u0000"
                                },
                                "id": 4232,
                                "name": "Literal",
                                "src": "11805:11:7"
                              }
                            ],
                            "id": 4233,
                            "name": "FunctionCall",
                            "src": "11724:102:7"
                          }
                        ],
                        "id": 4234,
                        "name": "Assignment",
                        "src": "11708:118:7"
                      }
                    ],
                    "id": 4235,
                    "name": "ExpressionStatement",
                    "src": "11708:118:7"
                  }
                ],
                "id": 4236,
                "name": "Block",
                "src": "10583:1250:7"
              }
            ],
            "id": 4237,
            "name": "FunctionDefinition",
            "src": "10155:1678:7"
          },
          {
            "attributes": {
              "documentation": "@notice Retreive the remaining term of the deposit\n @dev    The return value is not guaranteed since block.timestmap can be lightly manipulated by miners.\n @return The remaining term of the deposit in seconds. 0 if already at term",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "remainingTerm",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4238,
                        "name": "UserDefinedTypeName",
                        "src": "12115:20:7"
                      }
                    ],
                    "id": 4239,
                    "name": "VariableDeclaration",
                    "src": "12115:31:7"
                  }
                ],
                "id": 4240,
                "name": "ParameterList",
                "src": "12114:33:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4241,
                        "name": "ElementaryTypeName",
                        "src": "12193:7:7"
                      }
                    ],
                    "id": 4242,
                    "name": "VariableDeclaration",
                    "src": "12193:7:7"
                  }
                ],
                "id": 4243,
                "name": "ParameterList",
                "src": "12192:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4245
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "endOfTerm",
                          "scope": 4268,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4244,
                            "name": "ElementaryTypeName",
                            "src": "12216:7:7"
                          }
                        ],
                        "id": 4245,
                        "name": "VariableDeclaration",
                        "src": "12216:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 16749,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "fundedAt",
                                  "referencedDeclaration": 3882,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4239,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4246,
                                    "name": "Identifier",
                                    "src": "12236:2:7"
                                  }
                                ],
                                "id": 4247,
                                "name": "MemberAccess",
                                "src": "12236:11:7"
                              }
                            ],
                            "id": 4248,
                            "name": "MemberAccess",
                            "src": "12236:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getDepositTerm",
                                  "referencedDeclaration": 6676,
                                  "type": "function () pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6757,
                                      "type": "type(library TBTCConstants)",
                                      "value": "TBTCConstants"
                                    },
                                    "id": 4249,
                                    "name": "Identifier",
                                    "src": "12252:13:7"
                                  }
                                ],
                                "id": 4250,
                                "name": "MemberAccess",
                                "src": "12252:28:7"
                              }
                            ],
                            "id": 4251,
                            "name": "FunctionCall",
                            "src": "12252:30:7"
                          }
                        ],
                        "id": 4252,
                        "name": "FunctionCall",
                        "src": "12236:47:7"
                      }
                    ],
                    "id": 4253,
                    "name": "VariableDeclarationStatement",
                    "src": "12216:67:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18350,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 4254,
                                "name": "Identifier",
                                "src": "12297:5:7"
                              }
                            ],
                            "id": 4255,
                            "name": "MemberAccess",
                            "src": "12297:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4245,
                              "type": "uint256",
                              "value": "endOfTerm"
                            },
                            "id": 4256,
                            "name": "Identifier",
                            "src": "12315:9:7"
                          }
                        ],
                        "id": 4257,
                        "name": "BinaryOperation",
                        "src": "12297:27:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4243
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sub",
                                      "referencedDeclaration": 16774,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4245,
                                          "type": "uint256",
                                          "value": "endOfTerm"
                                        },
                                        "id": 4258,
                                        "name": "Identifier",
                                        "src": "12347:9:7"
                                      }
                                    ],
                                    "id": 4259,
                                    "name": "MemberAccess",
                                    "src": "12347:13:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "timestamp",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18350,
                                          "type": "block",
                                          "value": "block"
                                        },
                                        "id": 4260,
                                        "name": "Identifier",
                                        "src": "12361:5:7"
                                      }
                                    ],
                                    "id": 4261,
                                    "name": "MemberAccess",
                                    "src": "12361:15:7"
                                  }
                                ],
                                "id": 4262,
                                "name": "FunctionCall",
                                "src": "12347:30:7"
                              }
                            ],
                            "id": 4263,
                            "name": "Return",
                            "src": "12340:37:7"
                          }
                        ],
                        "id": 4264,
                        "name": "Block",
                        "src": "12326:62:7"
                      }
                    ],
                    "id": 4265,
                    "name": "IfStatement",
                    "src": "12293:95:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4243
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 4266,
                        "name": "Literal",
                        "src": "12404:1:7"
                      }
                    ],
                    "id": 4267,
                    "name": "Return",
                    "src": "12397:8:7"
                  }
                ],
                "id": 4268,
                "name": "Block",
                "src": "12206:206:7"
              }
            ],
            "id": 4269,
            "name": "FunctionDefinition",
            "src": "12092:320:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Calculates the amount of value at auction right now.\n @dev        We calculate the % of the auction that has elapsed, then scale the value up.\n @param _d   Deposit storage pointer.\n @return     The value in wei to distribute in the auction at the current time.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "auctionValue",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4340,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4270,
                        "name": "UserDefinedTypeName",
                        "src": "12742:7:7"
                      }
                    ],
                    "id": 4271,
                    "name": "VariableDeclaration",
                    "src": "12742:18:7"
                  }
                ],
                "id": 4272,
                "name": "ParameterList",
                "src": "12741:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4340,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4273,
                        "name": "ElementaryTypeName",
                        "src": "12785:7:7"
                      }
                    ],
                    "id": 4274,
                    "name": "VariableDeclaration",
                    "src": "12785:7:7"
                  }
                ],
                "id": 4275,
                "name": "ParameterList",
                "src": "12784:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4277
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_elapsed",
                          "scope": 4339,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4276,
                            "name": "ElementaryTypeName",
                            "src": "12804:7:7"
                          }
                        ],
                        "id": 4277,
                        "name": "VariableDeclaration",
                        "src": "12804:16:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 16774,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "timestamp",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18350,
                                      "type": "block",
                                      "value": "block"
                                    },
                                    "id": 4278,
                                    "name": "Identifier",
                                    "src": "12823:5:7"
                                  }
                                ],
                                "id": 4279,
                                "name": "MemberAccess",
                                "src": "12823:15:7"
                              }
                            ],
                            "id": 4280,
                            "name": "MemberAccess",
                            "src": "12823:19:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "liquidationInitiated",
                              "referencedDeclaration": 3852,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4271,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4281,
                                "name": "Identifier",
                                "src": "12843:2:7"
                              }
                            ],
                            "id": 4282,
                            "name": "MemberAccess",
                            "src": "12843:23:7"
                          }
                        ],
                        "id": 4283,
                        "name": "FunctionCall",
                        "src": "12823:44:7"
                      }
                    ],
                    "id": 4284,
                    "name": "VariableDeclarationStatement",
                    "src": "12804:63:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4286
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_available",
                          "scope": 4339,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4285,
                            "name": "ElementaryTypeName",
                            "src": "12877:7:7"
                          }
                        ],
                        "id": 4286,
                        "name": "VariableDeclaration",
                        "src": "12877:18:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "balance",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                      "typeString": "library DepositUtils"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4287,
                                "name": "ElementaryTypeNameExpression",
                                "src": "12898:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18430,
                                  "type": "library DepositUtils",
                                  "value": "this"
                                },
                                "id": 4288,
                                "name": "Identifier",
                                "src": "12906:4:7"
                              }
                            ],
                            "id": 4289,
                            "name": "FunctionCall",
                            "src": "12898:13:7"
                          }
                        ],
                        "id": 4290,
                        "name": "MemberAccess",
                        "src": "12898:21:7"
                      }
                    ],
                    "id": 4291,
                    "name": "VariableDeclarationStatement",
                    "src": "12877:42:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4277,
                              "type": "uint256",
                              "value": "_elapsed"
                            },
                            "id": 4292,
                            "name": "Identifier",
                            "src": "12933:8:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAuctionDuration",
                                  "referencedDeclaration": 6756,
                                  "type": "function () pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6757,
                                      "type": "type(library TBTCConstants)",
                                      "value": "TBTCConstants"
                                    },
                                    "id": 4293,
                                    "name": "Identifier",
                                    "src": "12944:13:7"
                                  }
                                ],
                                "id": 4294,
                                "name": "MemberAccess",
                                "src": "12944:32:7"
                              }
                            ],
                            "id": 4295,
                            "name": "FunctionCall",
                            "src": "12944:34:7"
                          }
                        ],
                        "id": 4296,
                        "name": "BinaryOperation",
                        "src": "12933:45:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4275
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4286,
                                  "type": "uint256",
                                  "value": "_available"
                                },
                                "id": 4297,
                                "name": "Identifier",
                                "src": "13001:10:7"
                              }
                            ],
                            "id": 4298,
                            "name": "Return",
                            "src": "12994:17:7"
                          }
                        ],
                        "id": 4299,
                        "name": "Block",
                        "src": "12980:42:7"
                      }
                    ],
                    "id": 4300,
                    "name": "IfStatement",
                    "src": "12929:93:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4302
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_basePercentage",
                          "scope": 4339,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4301,
                            "name": "ElementaryTypeName",
                            "src": "13093:7:7"
                          }
                        ],
                        "id": 4302,
                        "name": "VariableDeclaration",
                        "src": "13093:23:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4652,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                              "value": "getAuctionBasePercentage"
                            },
                            "id": 4303,
                            "name": "Identifier",
                            "src": "13119:24:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4271,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 4304,
                            "name": "Identifier",
                            "src": "13144:2:7"
                          }
                        ],
                        "id": 4305,
                        "name": "FunctionCall",
                        "src": "13119:28:7"
                      }
                    ],
                    "id": 4306,
                    "name": "VariableDeclarationStatement",
                    "src": "13093:54:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4308
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_elapsedPercentage",
                          "scope": 4339,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4307,
                            "name": "ElementaryTypeName",
                            "src": "13157:7:7"
                          }
                        ],
                        "id": 4308,
                        "name": "VariableDeclaration",
                        "src": "13157:26:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 16833,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 16808,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sub",
                                              "referencedDeclaration": 16774,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_rational_100_by_1",
                                                          "typeString": "int_const 100"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)",
                                                      "value": "uint256"
                                                    },
                                                    "id": 4309,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "13198:7:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "hexvalue": "313030",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "subdenomination": null,
                                                      "token": "number",
                                                      "type": "int_const 100",
                                                      "value": "100"
                                                    },
                                                    "id": 4310,
                                                    "name": "Literal",
                                                    "src": "13206:3:7"
                                                  }
                                                ],
                                                "id": 4311,
                                                "name": "FunctionCall",
                                                "src": "13198:12:7"
                                              }
                                            ],
                                            "id": 4312,
                                            "name": "MemberAccess",
                                            "src": "13198:16:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4302,
                                              "type": "uint256",
                                              "value": "_basePercentage"
                                            },
                                            "id": 4313,
                                            "name": "Identifier",
                                            "src": "13215:15:7"
                                          }
                                        ],
                                        "id": 4314,
                                        "name": "FunctionCall",
                                        "src": "13198:33:7"
                                      }
                                    ],
                                    "id": 4315,
                                    "name": "MemberAccess",
                                    "src": "13198:37:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4277,
                                      "type": "uint256",
                                      "value": "_elapsed"
                                    },
                                    "id": 4316,
                                    "name": "Identifier",
                                    "src": "13236:8:7"
                                  }
                                ],
                                "id": 4317,
                                "name": "FunctionCall",
                                "src": "13198:47:7"
                              }
                            ],
                            "id": 4318,
                            "name": "MemberAccess",
                            "src": "13198:51:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getAuctionDuration",
                                  "referencedDeclaration": 6756,
                                  "type": "function () pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6757,
                                      "type": "type(library TBTCConstants)",
                                      "value": "TBTCConstants"
                                    },
                                    "id": 4319,
                                    "name": "Identifier",
                                    "src": "13267:13:7"
                                  }
                                ],
                                "id": 4320,
                                "name": "MemberAccess",
                                "src": "13267:32:7"
                              }
                            ],
                            "id": 4321,
                            "name": "FunctionCall",
                            "src": "13267:34:7"
                          }
                        ],
                        "id": 4322,
                        "name": "FunctionCall",
                        "src": "13198:117:7"
                      }
                    ],
                    "id": 4323,
                    "name": "VariableDeclarationStatement",
                    "src": "13157:158:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4325
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_percentage",
                          "scope": 4339,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4324,
                            "name": "ElementaryTypeName",
                            "src": "13325:7:7"
                          }
                        ],
                        "id": 4325,
                        "name": "VariableDeclaration",
                        "src": "13325:19:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 16749,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4302,
                                  "type": "uint256",
                                  "value": "_basePercentage"
                                },
                                "id": 4326,
                                "name": "Identifier",
                                "src": "13347:15:7"
                              }
                            ],
                            "id": 4327,
                            "name": "MemberAccess",
                            "src": "13347:19:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4308,
                              "type": "uint256",
                              "value": "_elapsedPercentage"
                            },
                            "id": 4328,
                            "name": "Identifier",
                            "src": "13367:18:7"
                          }
                        ],
                        "id": 4329,
                        "name": "FunctionCall",
                        "src": "13347:39:7"
                      }
                    ],
                    "id": 4330,
                    "name": "VariableDeclarationStatement",
                    "src": "13325:61:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4275
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 16833,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 16808,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4286,
                                          "type": "uint256",
                                          "value": "_available"
                                        },
                                        "id": 4331,
                                        "name": "Identifier",
                                        "src": "13404:10:7"
                                      }
                                    ],
                                    "id": 4332,
                                    "name": "MemberAccess",
                                    "src": "13404:14:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4325,
                                      "type": "uint256",
                                      "value": "_percentage"
                                    },
                                    "id": 4333,
                                    "name": "Identifier",
                                    "src": "13419:11:7"
                                  }
                                ],
                                "id": 4334,
                                "name": "FunctionCall",
                                "src": "13404:27:7"
                              }
                            ],
                            "id": 4335,
                            "name": "MemberAccess",
                            "src": "13404:31:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "313030",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 100",
                              "value": "100"
                            },
                            "id": 4336,
                            "name": "Literal",
                            "src": "13436:3:7"
                          }
                        ],
                        "id": 4337,
                        "name": "FunctionCall",
                        "src": "13404:36:7"
                      }
                    ],
                    "id": 4338,
                    "name": "Return",
                    "src": "13397:43:7"
                  }
                ],
                "id": 4339,
                "name": "Block",
                "src": "12794:653:7"
              }
            ],
            "id": 4340,
            "name": "FunctionDefinition",
            "src": "12720:727:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Gets the lot size in erc20 decimal places (max 18)\n @return         uint256 lot size in 10**18 decimals.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "lotSizeTbtc",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4356,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4341,
                        "name": "UserDefinedTypeName",
                        "src": "13610:7:7"
                      }
                    ],
                    "id": 4342,
                    "name": "VariableDeclaration",
                    "src": "13610:18:7"
                  }
                ],
                "id": 4343,
                "name": "ParameterList",
                "src": "13609:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4356,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4344,
                        "name": "ElementaryTypeName",
                        "src": "13651:7:7"
                      }
                    ],
                    "id": 4345,
                    "name": "VariableDeclaration",
                    "src": "13651:7:7"
                  }
                ],
                "id": 4346,
                "name": "ParameterList",
                "src": "13650:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4346
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mul",
                              "referencedDeclaration": 16808,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "lotSizeSatoshis",
                                  "referencedDeclaration": 3838,
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4342,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4347,
                                    "name": "Identifier",
                                    "src": "13677:2:7"
                                  }
                                ],
                                "id": 4348,
                                "name": "MemberAccess",
                                "src": "13677:18:7"
                              }
                            ],
                            "id": 4349,
                            "name": "MemberAccess",
                            "src": "13677:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getSatoshiMultiplier",
                                  "referencedDeclaration": 6668,
                                  "type": "function () pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6757,
                                      "type": "type(library TBTCConstants)",
                                      "value": "TBTCConstants"
                                    },
                                    "id": 4350,
                                    "name": "Identifier",
                                    "src": "13700:13:7"
                                  }
                                ],
                                "id": 4351,
                                "name": "MemberAccess",
                                "src": "13700:34:7"
                              }
                            ],
                            "id": 4352,
                            "name": "FunctionCall",
                            "src": "13700:36:7"
                          }
                        ],
                        "id": 4353,
                        "name": "FunctionCall",
                        "src": "13677:60:7"
                      }
                    ],
                    "id": 4354,
                    "name": "Return",
                    "src": "13670:67:7"
                  }
                ],
                "id": 4355,
                "name": "Block",
                "src": "13660:84:7"
              }
            ],
            "id": 4356,
            "name": "FunctionDefinition",
            "src": "13589:155:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Determines the fees due to the signers for work performed.\n @dev            Signers are paid based on the TBTC issued.\n @return         Accumulated fees in 10**18 decimals.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerFeeTbtc",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4372,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4357,
                        "name": "UserDefinedTypeName",
                        "src": "13984:7:7"
                      }
                    ],
                    "id": 4358,
                    "name": "VariableDeclaration",
                    "src": "13984:18:7"
                  }
                ],
                "id": 4359,
                "name": "ParameterList",
                "src": "13983:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4372,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4360,
                        "name": "ElementaryTypeName",
                        "src": "14025:7:7"
                      }
                    ],
                    "id": 4361,
                    "name": "VariableDeclaration",
                    "src": "14025:7:7"
                  }
                ],
                "id": 4362,
                "name": "ParameterList",
                "src": "14024:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4362
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 16833,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                          "typeString": "struct DepositUtils.Deposit storage pointer"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4356,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                                      "value": "lotSizeTbtc"
                                    },
                                    "id": 4363,
                                    "name": "Identifier",
                                    "src": "14051:11:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4358,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4364,
                                    "name": "Identifier",
                                    "src": "14063:2:7"
                                  }
                                ],
                                "id": 4365,
                                "name": "FunctionCall",
                                "src": "14051:15:7"
                              }
                            ],
                            "id": 4366,
                            "name": "MemberAccess",
                            "src": "14051:19:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signerFeeDivisor",
                              "referencedDeclaration": 3842,
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4358,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4367,
                                "name": "Identifier",
                                "src": "14071:2:7"
                              }
                            ],
                            "id": 4368,
                            "name": "MemberAccess",
                            "src": "14071:19:7"
                          }
                        ],
                        "id": 4369,
                        "name": "FunctionCall",
                        "src": "14051:40:7"
                      }
                    ],
                    "id": 4370,
                    "name": "Return",
                    "src": "14044:47:7"
                  }
                ],
                "id": 4371,
                "name": "Block",
                "src": "14034:64:7"
              }
            ],
            "id": 4372,
            "name": "FunctionDefinition",
            "src": "13961:137:7"
          },
          {
            "attributes": {
              "documentation": "@notice             Determines the prefix to the compressed public key.\n @dev                The prefix encodes the parity of the Y coordinate.\n @param  _pubkeyY    The Y coordinate of the public key.\n @return             The 1-byte prefix for the compressed key.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "determineCompressionPrefix",
              "scope": 5103,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkeyY",
                      "scope": 4394,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4373,
                        "name": "ElementaryTypeName",
                        "src": "14433:7:7"
                      }
                    ],
                    "id": 4374,
                    "name": "VariableDeclaration",
                    "src": "14433:16:7"
                  }
                ],
                "id": 4375,
                "name": "ParameterList",
                "src": "14432:18:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4394,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4376,
                        "name": "ElementaryTypeName",
                        "src": "14496:5:7"
                      }
                    ],
                    "id": 4377,
                    "name": "VariableDeclaration",
                    "src": "14496:12:7"
                  }
                ],
                "id": 4378,
                "name": "ParameterList",
                "src": "14495:14:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)",
                                      "value": "uint256"
                                    },
                                    "id": 4379,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "14528:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4374,
                                      "type": "bytes32",
                                      "value": "_pubkeyY"
                                    },
                                    "id": 4380,
                                    "name": "Identifier",
                                    "src": "14536:8:7"
                                  }
                                ],
                                "id": 4381,
                                "name": "FunctionCall",
                                "src": "14528:17:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 4382,
                                "name": "Literal",
                                "src": "14548:1:7"
                              }
                            ],
                            "id": 4383,
                            "name": "BinaryOperation",
                            "src": "14528:21:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 4384,
                            "name": "Literal",
                            "src": "14553:1:7"
                          }
                        ],
                        "id": 4385,
                        "name": "BinaryOperation",
                        "src": "14528:26:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4378
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "03",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"\u0003\"",
                                  "value": "\u0003"
                                },
                                "id": 4386,
                                "name": "Literal",
                                "src": "14577:7:7"
                              }
                            ],
                            "id": 4387,
                            "name": "Return",
                            "src": "14570:14:7"
                          }
                        ],
                        "id": 4388,
                        "name": "Block",
                        "src": "14556:48:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4378
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "02",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"\u0002\"",
                                  "value": "\u0002"
                                },
                                "id": 4389,
                                "name": "Literal",
                                "src": "14631:7:7"
                              }
                            ],
                            "id": 4390,
                            "name": "Return",
                            "src": "14624:14:7"
                          }
                        ],
                        "id": 4391,
                        "name": "Block",
                        "src": "14610:49:7"
                      }
                    ],
                    "id": 4392,
                    "name": "IfStatement",
                    "src": "14524:135:7"
                  }
                ],
                "id": 4393,
                "name": "Block",
                "src": "14514:151:7"
              }
            ],
            "id": 4394,
            "name": "FunctionDefinition",
            "src": "14397:268:7"
          },
          {
            "attributes": {
              "documentation": "@notice             Compresses a public key.\n @dev                Converts the 64-byte key to a 33-byte key, bitcoin-style.\n @param  _pubkeyX    The X coordinate of the public key.\n @param  _pubkeyY    The Y coordinate of the public key.\n @return             The 33-byte compressed pubkey.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "compressPubkey",
              "scope": 5103,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkeyX",
                      "scope": 4412,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4395,
                        "name": "ElementaryTypeName",
                        "src": "15021:7:7"
                      }
                    ],
                    "id": 4396,
                    "name": "VariableDeclaration",
                    "src": "15021:16:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_pubkeyY",
                      "scope": 4412,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4397,
                        "name": "ElementaryTypeName",
                        "src": "15039:7:7"
                      }
                    ],
                    "id": 4398,
                    "name": "VariableDeclaration",
                    "src": "15039:16:7"
                  }
                ],
                "id": 4399,
                "name": "ParameterList",
                "src": "15020:36:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4412,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4400,
                        "name": "ElementaryTypeName",
                        "src": "15102:5:7"
                      }
                    ],
                    "id": 4401,
                    "name": "VariableDeclaration",
                    "src": "15102:12:7"
                  }
                ],
                "id": 4402,
                "name": "ParameterList",
                "src": "15101:14:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4402
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 4403,
                                "name": "Identifier",
                                "src": "15137:3:7"
                              }
                            ],
                            "id": 4404,
                            "name": "MemberAccess",
                            "src": "15137:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4394,
                                  "type": "function (bytes32) pure returns (bytes memory)",
                                  "value": "determineCompressionPrefix"
                                },
                                "id": 4405,
                                "name": "Identifier",
                                "src": "15154:26:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4398,
                                  "type": "bytes32",
                                  "value": "_pubkeyY"
                                },
                                "id": 4406,
                                "name": "Identifier",
                                "src": "15181:8:7"
                              }
                            ],
                            "id": 4407,
                            "name": "FunctionCall",
                            "src": "15154:36:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4396,
                              "type": "bytes32",
                              "value": "_pubkeyX"
                            },
                            "id": 4408,
                            "name": "Identifier",
                            "src": "15192:8:7"
                          }
                        ],
                        "id": 4409,
                        "name": "FunctionCall",
                        "src": "15137:64:7"
                      }
                    ],
                    "id": 4410,
                    "name": "Return",
                    "src": "15130:71:7"
                  }
                ],
                "id": 4411,
                "name": "Block",
                "src": "15120:88:7"
              }
            ],
            "id": 4412,
            "name": "FunctionDefinition",
            "src": "14997:211:7"
          },
          {
            "attributes": {
              "documentation": "@notice    Returns the packed public key (64 bytes) for the signing group.\n @dev       We store it as 2 bytes32, (2 slots) then repack it on demand.\n @return    64 byte public key.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerPubkey",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4428,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4413,
                        "name": "UserDefinedTypeName",
                        "src": "15439:7:7"
                      }
                    ],
                    "id": 4414,
                    "name": "VariableDeclaration",
                    "src": "15439:18:7"
                  }
                ],
                "id": 4415,
                "name": "ParameterList",
                "src": "15438:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4428,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 4416,
                        "name": "ElementaryTypeName",
                        "src": "15506:5:7"
                      }
                    ],
                    "id": 4417,
                    "name": "VariableDeclaration",
                    "src": "15506:12:7"
                  }
                ],
                "id": 4418,
                "name": "ParameterList",
                "src": "15505:14:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4418
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "encodePacked",
                              "referencedDeclaration": null,
                              "type": "function () pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18347,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 4419,
                                "name": "Identifier",
                                "src": "15541:3:7"
                              }
                            ],
                            "id": 4420,
                            "name": "MemberAccess",
                            "src": "15541:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signingGroupPubkeyX",
                              "referencedDeclaration": 3864,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4414,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4421,
                                "name": "Identifier",
                                "src": "15558:2:7"
                              }
                            ],
                            "id": 4422,
                            "name": "MemberAccess",
                            "src": "15558:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signingGroupPubkeyY",
                              "referencedDeclaration": 3866,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4414,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4423,
                                "name": "Identifier",
                                "src": "15582:2:7"
                              }
                            ],
                            "id": 4424,
                            "name": "MemberAccess",
                            "src": "15582:22:7"
                          }
                        ],
                        "id": 4425,
                        "name": "FunctionCall",
                        "src": "15541:64:7"
                      }
                    ],
                    "id": 4426,
                    "name": "Return",
                    "src": "15534:71:7"
                  }
                ],
                "id": 4427,
                "name": "Block",
                "src": "15524:88:7"
              }
            ],
            "id": 4428,
            "name": "FunctionDefinition",
            "src": "15417:195:7"
          },
          {
            "attributes": {
              "documentation": "@notice    Returns the Bitcoin pubkeyhash (hash160) for the signing group.\n @dev       This is used in bitcoin output scripts for the signers.\n @return    20-bytes public key hash.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "signerPKH",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4458,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4429,
                        "name": "UserDefinedTypeName",
                        "src": "15840:7:7"
                      }
                    ],
                    "id": 4430,
                    "name": "VariableDeclaration",
                    "src": "15840:18:7"
                  }
                ],
                "id": 4431,
                "name": "ParameterList",
                "src": "15839:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4458,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes20",
                          "type": "bytes20"
                        },
                        "id": 4432,
                        "name": "ElementaryTypeName",
                        "src": "15881:7:7"
                      }
                    ],
                    "id": 4433,
                    "name": "VariableDeclaration",
                    "src": "15881:7:7"
                  }
                ],
                "id": 4434,
                "name": "ParameterList",
                "src": "15880:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4436
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_pubkey",
                          "scope": 4457,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 4435,
                            "name": "ElementaryTypeName",
                            "src": "15900:5:7"
                          }
                        ],
                        "id": 4436,
                        "name": "VariableDeclaration",
                        "src": "15900:20:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4412,
                              "type": "function (bytes32,bytes32) pure returns (bytes memory)",
                              "value": "compressPubkey"
                            },
                            "id": 4437,
                            "name": "Identifier",
                            "src": "15935:14:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signingGroupPubkeyX",
                              "referencedDeclaration": 3864,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4430,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4438,
                                "name": "Identifier",
                                "src": "15950:2:7"
                              }
                            ],
                            "id": 4439,
                            "name": "MemberAccess",
                            "src": "15950:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "signingGroupPubkeyY",
                              "referencedDeclaration": 3866,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4430,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4440,
                                "name": "Identifier",
                                "src": "15974:2:7"
                              }
                            ],
                            "id": 4441,
                            "name": "MemberAccess",
                            "src": "15974:22:7"
                          }
                        ],
                        "id": 4442,
                        "name": "FunctionCall",
                        "src": "15935:62:7"
                      }
                    ],
                    "id": 4443,
                    "name": "VariableDeclarationStatement",
                    "src": "15900:97:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4445
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_digest",
                          "scope": 4457,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 4444,
                            "name": "ElementaryTypeName",
                            "src": "16007:5:7"
                          }
                        ],
                        "id": 4445,
                        "name": "VariableDeclaration",
                        "src": "16007:20:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "hash160",
                              "referencedDeclaration": 11834,
                              "type": "function (bytes memory) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4436,
                                  "type": "bytes memory",
                                  "value": "_pubkey"
                                },
                                "id": 4446,
                                "name": "Identifier",
                                "src": "16030:7:7"
                              }
                            ],
                            "id": 4447,
                            "name": "MemberAccess",
                            "src": "16030:15:7"
                          }
                        ],
                        "id": 4448,
                        "name": "FunctionCall",
                        "src": "16030:17:7"
                      }
                    ],
                    "id": 4449,
                    "name": "VariableDeclarationStatement",
                    "src": "16007:40:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4434
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(bytes20)",
                              "value": "bytes20"
                            },
                            "id": 4450,
                            "name": "ElementaryTypeNameExpression",
                            "src": "16064:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toAddress",
                                  "referencedDeclaration": 13315,
                                  "type": "function (bytes memory,uint256) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4445,
                                      "type": "bytes memory",
                                      "value": "_digest"
                                    },
                                    "id": 4451,
                                    "name": "Identifier",
                                    "src": "16072:7:7"
                                  }
                                ],
                                "id": 4452,
                                "name": "MemberAccess",
                                "src": "16072:17:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4453,
                                "name": "Literal",
                                "src": "16090:1:7"
                              }
                            ],
                            "id": 4454,
                            "name": "FunctionCall",
                            "src": "16072:20:7"
                          }
                        ],
                        "id": 4455,
                        "name": "FunctionCall",
                        "src": "16064:29:7"
                      }
                    ],
                    "id": 4456,
                    "name": "Return",
                    "src": "16057:36:7"
                  }
                ],
                "id": 4457,
                "name": "Block",
                "src": "15890:233:7"
              }
            ],
            "id": 4458,
            "name": "FunctionDefinition",
            "src": "15821:302:7"
          },
          {
            "attributes": {
              "documentation": "@notice    Returns the size of the deposit UTXO in satoshi.\n @dev       We store the deposit as bytes8 to make signature checking easier.\n @return    UTXO value in satoshi.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "utxoValue",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4471,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4459,
                        "name": "UserDefinedTypeName",
                        "src": "16343:7:7"
                      }
                    ],
                    "id": 4460,
                    "name": "VariableDeclaration",
                    "src": "16343:18:7"
                  }
                ],
                "id": 4461,
                "name": "ParameterList",
                "src": "16342:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4471,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4462,
                        "name": "ElementaryTypeName",
                        "src": "16386:7:7"
                      }
                    ],
                    "id": 4463,
                    "name": "VariableDeclaration",
                    "src": "16386:7:7"
                  }
                ],
                "id": 4464,
                "name": "ParameterList",
                "src": "16385:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4464
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4520,
                              "type": "function (bytes8) pure returns (uint256)",
                              "value": "bytes8LEToUint"
                            },
                            "id": 4465,
                            "name": "Identifier",
                            "src": "16412:14:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "utxoValueBytes",
                              "referencedDeclaration": 3880,
                              "type": "bytes8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4460,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4466,
                                "name": "Identifier",
                                "src": "16427:2:7"
                              }
                            ],
                            "id": 4467,
                            "name": "MemberAccess",
                            "src": "16427:17:7"
                          }
                        ],
                        "id": 4468,
                        "name": "FunctionCall",
                        "src": "16412:33:7"
                      }
                    ],
                    "id": 4469,
                    "name": "Return",
                    "src": "16405:40:7"
                  }
                ],
                "id": 4470,
                "name": "Block",
                "src": "16395:57:7"
              }
            ],
            "id": 4471,
            "name": "FunctionDefinition",
            "src": "16324:128:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Gets the current price of Bitcoin in Ether.\n @dev        Polls the price feed via the system contract.\n @return     The current price of 1 sat in wei.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fetchBitcoinPrice",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4484,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4472,
                        "name": "UserDefinedTypeName",
                        "src": "16670:7:7"
                      }
                    ],
                    "id": 4473,
                    "name": "VariableDeclaration",
                    "src": "16670:18:7"
                  }
                ],
                "id": 4474,
                "name": "ParameterList",
                "src": "16669:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4484,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4475,
                        "name": "ElementaryTypeName",
                        "src": "16737:7:7"
                      }
                    ],
                    "id": 4476,
                    "name": "VariableDeclaration",
                    "src": "16737:7:7"
                  }
                ],
                "id": 4477,
                "name": "ParameterList",
                "src": "16736:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4477
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "fetchBitcoinPrice",
                              "referencedDeclaration": 5454,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcSystem",
                                  "referencedDeclaration": 3828,
                                  "type": "contract ITBTCSystem"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4473,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4478,
                                    "name": "Identifier",
                                    "src": "16767:2:7"
                                  }
                                ],
                                "id": 4479,
                                "name": "MemberAccess",
                                "src": "16767:13:7"
                              }
                            ],
                            "id": 4480,
                            "name": "MemberAccess",
                            "src": "16767:31:7"
                          }
                        ],
                        "id": 4481,
                        "name": "FunctionCall",
                        "src": "16767:33:7"
                      }
                    ],
                    "id": 4482,
                    "name": "Return",
                    "src": "16760:40:7"
                  }
                ],
                "id": 4483,
                "name": "Block",
                "src": "16750:57:7"
              }
            ],
            "id": 4484,
            "name": "FunctionDefinition",
            "src": "16643:164:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Fetches the Keep's bond amount in wei.\n @dev        Calls the keep contract to do so.\n @return     The amount of bonded ETH in wei.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "fetchBondAmount",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4503,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4485,
                        "name": "UserDefinedTypeName",
                        "src": "17004:7:7"
                      }
                    ],
                    "id": 4486,
                    "name": "VariableDeclaration",
                    "src": "17004:18:7"
                  }
                ],
                "id": 4487,
                "name": "ParameterList",
                "src": "17003:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4503,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4488,
                        "name": "ElementaryTypeName",
                        "src": "17071:7:7"
                      }
                    ],
                    "id": 4489,
                    "name": "VariableDeclaration",
                    "src": "17071:7:7"
                  }
                ],
                "id": 4490,
                "name": "ParameterList",
                "src": "17070:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4492
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_keep",
                          "scope": 4502,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IBondedECDSAKeep",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IBondedECDSAKeep",
                              "referencedDeclaration": 11428,
                              "type": "contract IBondedECDSAKeep"
                            },
                            "id": 4491,
                            "name": "UserDefinedTypeName",
                            "src": "17094:16:7"
                          }
                        ],
                        "id": 4492,
                        "name": "VariableDeclaration",
                        "src": "17094:22:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeep",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11428,
                              "type": "type(contract IBondedECDSAKeep)",
                              "value": "IBondedECDSAKeep"
                            },
                            "id": 4493,
                            "name": "Identifier",
                            "src": "17119:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keepAddress",
                              "referencedDeclaration": 3858,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4486,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4494,
                                "name": "Identifier",
                                "src": "17136:2:7"
                              }
                            ],
                            "id": 4495,
                            "name": "MemberAccess",
                            "src": "17136:14:7"
                          }
                        ],
                        "id": 4496,
                        "name": "FunctionCall",
                        "src": "17119:32:7"
                      }
                    ],
                    "id": 4497,
                    "name": "VariableDeclarationStatement",
                    "src": "17094:57:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4490
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "checkBondAmount",
                              "referencedDeclaration": 11388,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4492,
                                  "type": "contract IBondedECDSAKeep",
                                  "value": "_keep"
                                },
                                "id": 4498,
                                "name": "Identifier",
                                "src": "17168:5:7"
                              }
                            ],
                            "id": 4499,
                            "name": "MemberAccess",
                            "src": "17168:21:7"
                          }
                        ],
                        "id": 4500,
                        "name": "FunctionCall",
                        "src": "17168:23:7"
                      }
                    ],
                    "id": 4501,
                    "name": "Return",
                    "src": "17161:30:7"
                  }
                ],
                "id": 4502,
                "name": "Block",
                "src": "17084:114:7"
              }
            ],
            "id": 4503,
            "name": "FunctionDefinition",
            "src": "16979:219:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Convert a LE bytes8 to a uint256.\n @dev            Do this by converting to bytes, then reversing endianness, then converting to int.\n @return         The uint256 represented in LE by the bytes8.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "bytes8LEToUint",
              "scope": 5103,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_b",
                      "scope": 4520,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes8",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes8",
                          "type": "bytes8"
                        },
                        "id": 4504,
                        "name": "ElementaryTypeName",
                        "src": "17462:6:7"
                      }
                    ],
                    "id": 4505,
                    "name": "VariableDeclaration",
                    "src": "17462:9:7"
                  }
                ],
                "id": 4506,
                "name": "ParameterList",
                "src": "17461:11:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4520,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4507,
                        "name": "ElementaryTypeName",
                        "src": "17494:7:7"
                      }
                    ],
                    "id": 4508,
                    "name": "VariableDeclaration",
                    "src": "17494:7:7"
                  }
                ],
                "id": 4509,
                "name": "ParameterList",
                "src": "17493:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4509
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "bytesToUint",
                              "referencedDeclaration": 11790,
                              "type": "function (bytes memory) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "reverseEndianness",
                                      "referencedDeclaration": 11643,
                                      "type": "function (bytes memory) pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes8",
                                                  "typeString": "bytes8"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "encodePacked",
                                              "referencedDeclaration": null,
                                              "type": "function () pure returns (bytes memory)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 18347,
                                                  "type": "abi",
                                                  "value": "abi"
                                                },
                                                "id": 4510,
                                                "name": "Identifier",
                                                "src": "17520:3:7"
                                              }
                                            ],
                                            "id": 4511,
                                            "name": "MemberAccess",
                                            "src": "17520:16:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4505,
                                              "type": "bytes8",
                                              "value": "_b"
                                            },
                                            "id": 4512,
                                            "name": "Identifier",
                                            "src": "17537:2:7"
                                          }
                                        ],
                                        "id": 4513,
                                        "name": "FunctionCall",
                                        "src": "17520:20:7"
                                      }
                                    ],
                                    "id": 4514,
                                    "name": "MemberAccess",
                                    "src": "17520:38:7"
                                  }
                                ],
                                "id": 4515,
                                "name": "FunctionCall",
                                "src": "17520:40:7"
                              }
                            ],
                            "id": 4516,
                            "name": "MemberAccess",
                            "src": "17520:52:7"
                          }
                        ],
                        "id": 4517,
                        "name": "FunctionCall",
                        "src": "17520:54:7"
                      }
                    ],
                    "id": 4518,
                    "name": "Return",
                    "src": "17513:61:7"
                  }
                ],
                "id": 4519,
                "name": "Block",
                "src": "17503:78:7"
              }
            ],
            "id": 4520,
            "name": "FunctionDefinition",
            "src": "17438:143:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Gets timestamp of digest approval for signing.\n @dev            Identifies entry in the recorded approvals by keep ID and digest pair.\n @param _digest  Digest to check approval for.\n @return         Timestamp from the moment of recording the digest for signing.\n                 Returns 0 if the digest was not approved for signing.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "wasDigestApprovedForSigning",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4535,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4521,
                        "name": "UserDefinedTypeName",
                        "src": "18009:7:7"
                      }
                    ],
                    "id": 4522,
                    "name": "VariableDeclaration",
                    "src": "18009:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_digest",
                      "scope": 4535,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4523,
                        "name": "ElementaryTypeName",
                        "src": "18029:7:7"
                      }
                    ],
                    "id": 4524,
                    "name": "VariableDeclaration",
                    "src": "18029:15:7"
                  }
                ],
                "id": 4525,
                "name": "ParameterList",
                "src": "18008:37:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4535,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4526,
                        "name": "ElementaryTypeName",
                        "src": "18093:7:7"
                      }
                    ],
                    "id": 4527,
                    "name": "VariableDeclaration",
                    "src": "18093:7:7"
                  }
                ],
                "id": 4528,
                "name": "ParameterList",
                "src": "18092:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4528
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "approvedDigests",
                              "referencedDeclaration": 3892,
                              "type": "mapping(bytes32 => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4522,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4529,
                                "name": "Identifier",
                                "src": "18123:2:7"
                              }
                            ],
                            "id": 4530,
                            "name": "MemberAccess",
                            "src": "18123:18:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4524,
                              "type": "bytes32",
                              "value": "_digest"
                            },
                            "id": 4531,
                            "name": "Identifier",
                            "src": "18142:7:7"
                          }
                        ],
                        "id": 4532,
                        "name": "IndexAccess",
                        "src": "18123:27:7"
                      }
                    ],
                    "id": 4533,
                    "name": "Return",
                    "src": "18116:34:7"
                  }
                ],
                "id": 4534,
                "name": "Block",
                "src": "18106:51:7"
              }
            ],
            "id": 4535,
            "name": "FunctionDefinition",
            "src": "17972:185:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Looks up the Fee Rebate Token holder.\n @return         The current token holder if the Token exists.\n                 address(0) if the token does not exist.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "feeRebateTokenHolder",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4582,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4536,
                        "name": "UserDefinedTypeName",
                        "src": "18389:7:7"
                      }
                    ],
                    "id": 4537,
                    "name": "VariableDeclaration",
                    "src": "18389:18:7"
                  }
                ],
                "id": 4538,
                "name": "ParameterList",
                "src": "18388:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4582,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 4539,
                        "name": "ElementaryTypeName",
                        "src": "18454:15:7"
                      }
                    ],
                    "id": 4540,
                    "name": "VariableDeclaration",
                    "src": "18454:15:7"
                  }
                ],
                "id": 4541,
                "name": "ParameterList",
                "src": "18453:17:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4543
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tokenHolder",
                          "scope": 4581,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 4542,
                            "name": "ElementaryTypeName",
                            "src": "18485:7:7"
                          }
                        ],
                        "id": 4543,
                        "name": "VariableDeclaration",
                        "src": "18485:19:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 4544,
                            "name": "ElementaryTypeNameExpression",
                            "src": "18507:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4545,
                            "name": "Literal",
                            "src": "18515:1:7"
                          }
                        ],
                        "id": 4546,
                        "name": "FunctionCall",
                        "src": "18507:10:7"
                      }
                    ],
                    "id": 4547,
                    "name": "VariableDeclarationStatement",
                    "src": "18485:32:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "exists",
                              "referencedDeclaration": 6299,
                              "type": "function (uint256) view external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "feeRebateToken",
                                  "referencedDeclaration": 3834,
                                  "type": "contract FeeRebateToken"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4537,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4548,
                                    "name": "Identifier",
                                    "src": "18531:2:7"
                                  }
                                ],
                                "id": 4549,
                                "name": "MemberAccess",
                                "src": "18531:17:7"
                              }
                            ],
                            "id": 4550,
                            "name": "MemberAccess",
                            "src": "18531:24:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 4551,
                                "name": "ElementaryTypeNameExpression",
                                "src": "18556:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                          "typeString": "library DepositUtils"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 4552,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "18564:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18430,
                                      "type": "library DepositUtils",
                                      "value": "this"
                                    },
                                    "id": 4553,
                                    "name": "Identifier",
                                    "src": "18572:4:7"
                                  }
                                ],
                                "id": 4554,
                                "name": "FunctionCall",
                                "src": "18564:13:7"
                              }
                            ],
                            "id": 4555,
                            "name": "FunctionCall",
                            "src": "18556:22:7"
                          }
                        ],
                        "id": 4556,
                        "name": "FunctionCall",
                        "src": "18531:48:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4543,
                                      "type": "address",
                                      "value": "tokenHolder"
                                    },
                                    "id": 4557,
                                    "name": "Identifier",
                                    "src": "18595:11:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 4558,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "18609:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint160",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint160)",
                                              "value": "uint160"
                                            },
                                            "id": 4559,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "18634:7:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "address",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "ownerOf",
                                                  "referencedDeclaration": 17591,
                                                  "type": "function (uint256) view external returns (address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "feeRebateToken",
                                                      "referencedDeclaration": 3834,
                                                      "type": "contract FeeRebateToken"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 4537,
                                                          "type": "struct DepositUtils.Deposit storage pointer",
                                                          "value": "_d"
                                                        },
                                                        "id": 4560,
                                                        "name": "Identifier",
                                                        "src": "18642:2:7"
                                                      }
                                                    ],
                                                    "id": 4561,
                                                    "name": "MemberAccess",
                                                    "src": "18642:17:7"
                                                  }
                                                ],
                                                "id": 4562,
                                                "name": "MemberAccess",
                                                "src": "18642:25:7"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)",
                                                      "value": "uint256"
                                                    },
                                                    "id": 4563,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "18668:7:7"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "type": "address",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                                              "typeString": "library DepositUtils"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(address)",
                                                          "value": "address"
                                                        },
                                                        "id": 4564,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "18676:7:7"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 18430,
                                                          "type": "library DepositUtils",
                                                          "value": "this"
                                                        },
                                                        "id": 4565,
                                                        "name": "Identifier",
                                                        "src": "18684:4:7"
                                                      }
                                                    ],
                                                    "id": 4566,
                                                    "name": "FunctionCall",
                                                    "src": "18676:13:7"
                                                  }
                                                ],
                                                "id": 4567,
                                                "name": "FunctionCall",
                                                "src": "18668:22:7"
                                              }
                                            ],
                                            "id": 4568,
                                            "name": "FunctionCall",
                                            "src": "18642:49:7"
                                          }
                                        ],
                                        "id": 4569,
                                        "name": "FunctionCall",
                                        "src": "18634:58:7"
                                      }
                                    ],
                                    "id": 4570,
                                    "name": "FunctionCall",
                                    "src": "18609:97:7"
                                  }
                                ],
                                "id": 4571,
                                "name": "Assignment",
                                "src": "18595:111:7"
                              }
                            ],
                            "id": 4572,
                            "name": "ExpressionStatement",
                            "src": "18595:111:7"
                          }
                        ],
                        "id": 4573,
                        "name": "Block",
                        "src": "18581:136:7"
                      }
                    ],
                    "id": 4574,
                    "name": "IfStatement",
                    "src": "18527:190:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4541
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 4575,
                            "name": "ElementaryTypeNameExpression",
                            "src": "18733:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint160",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint160)",
                                  "value": "uint160"
                                },
                                "id": 4576,
                                "name": "ElementaryTypeNameExpression",
                                "src": "18741:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4543,
                                  "type": "address",
                                  "value": "tokenHolder"
                                },
                                "id": 4577,
                                "name": "Identifier",
                                "src": "18749:11:7"
                              }
                            ],
                            "id": 4578,
                            "name": "FunctionCall",
                            "src": "18741:20:7"
                          }
                        ],
                        "id": 4579,
                        "name": "FunctionCall",
                        "src": "18733:29:7"
                      }
                    ],
                    "id": 4580,
                    "name": "Return",
                    "src": "18726:36:7"
                  }
                ],
                "id": 4581,
                "name": "Block",
                "src": "18475:294:7"
              }
            ],
            "id": 4582,
            "name": "FunctionDefinition",
            "src": "18359:410:7"
          },
          {
            "attributes": {
              "documentation": "@notice         Looks up the deposit beneficiary by calling the tBTC system.\n @dev            We cast the address to a uint256 to match the 721 standard.\n @return         The current deposit beneficiary.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "depositOwner",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4604,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4583,
                        "name": "UserDefinedTypeName",
                        "src": "19023:7:7"
                      }
                    ],
                    "id": 4584,
                    "name": "VariableDeclaration",
                    "src": "19023:18:7"
                  }
                ],
                "id": 4585,
                "name": "ParameterList",
                "src": "19022:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4604,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address payable",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "payable",
                          "type": "address payable"
                        },
                        "id": 4586,
                        "name": "ElementaryTypeName",
                        "src": "19088:15:7"
                      }
                    ],
                    "id": 4587,
                    "name": "VariableDeclaration",
                    "src": "19088:15:7"
                  }
                ],
                "id": 4588,
                "name": "ParameterList",
                "src": "19087:17:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4588
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 4589,
                            "name": "ElementaryTypeNameExpression",
                            "src": "19138:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint160",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint160)",
                                  "value": "uint160"
                                },
                                "id": 4590,
                                "name": "ElementaryTypeNameExpression",
                                "src": "19163:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "ownerOf",
                                      "referencedDeclaration": 18227,
                                      "type": "function (uint256) view external returns (address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "tbtcDepositToken",
                                          "referencedDeclaration": 3832,
                                          "type": "contract IERC721"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4584,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 4591,
                                            "name": "Identifier",
                                            "src": "19171:2:7"
                                          }
                                        ],
                                        "id": 4592,
                                        "name": "MemberAccess",
                                        "src": "19171:19:7"
                                      }
                                    ],
                                    "id": 4593,
                                    "name": "MemberAccess",
                                    "src": "19171:27:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint256)",
                                          "value": "uint256"
                                        },
                                        "id": 4594,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "19199:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "address",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                                  "typeString": "library DepositUtils"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(address)",
                                              "value": "address"
                                            },
                                            "id": 4595,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "19207:7:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18430,
                                              "type": "library DepositUtils",
                                              "value": "this"
                                            },
                                            "id": 4596,
                                            "name": "Identifier",
                                            "src": "19215:4:7"
                                          }
                                        ],
                                        "id": 4597,
                                        "name": "FunctionCall",
                                        "src": "19207:13:7"
                                      }
                                    ],
                                    "id": 4598,
                                    "name": "FunctionCall",
                                    "src": "19199:22:7"
                                  }
                                ],
                                "id": 4599,
                                "name": "FunctionCall",
                                "src": "19171:51:7"
                              }
                            ],
                            "id": 4600,
                            "name": "FunctionCall",
                            "src": "19163:60:7"
                          }
                        ],
                        "id": 4601,
                        "name": "FunctionCall",
                        "src": "19138:99:7"
                      }
                    ],
                    "id": 4602,
                    "name": "Return",
                    "src": "19119:118:7"
                  }
                ],
                "id": 4603,
                "name": "Block",
                "src": "19109:135:7"
              }
            ],
            "id": 4604,
            "name": "FunctionDefinition",
            "src": "19001:243:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Deletes state after termination of redemption process.\n @dev        We keep around the redeemer address so we can pay them out.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "redemptionTeardown",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4636,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4605,
                        "name": "UserDefinedTypeName",
                        "src": "19433:7:7"
                      }
                    ],
                    "id": 4606,
                    "name": "VariableDeclaration",
                    "src": "19433:18:7"
                  }
                ],
                "id": 4607,
                "name": "ParameterList",
                "src": "19432:20:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4608,
                "name": "ParameterList",
                "src": "19460:0:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "redeemerOutputScript",
                              "referencedDeclaration": 3870,
                              "type": "bytes storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4606,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4609,
                                "name": "Identifier",
                                "src": "19470:2:7"
                              }
                            ],
                            "id": 4611,
                            "name": "MemberAccess",
                            "src": "19470:23:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 4612,
                            "name": "Literal",
                            "src": "19496:2:7"
                          }
                        ],
                        "id": 4613,
                        "name": "Assignment",
                        "src": "19470:28:7"
                      }
                    ],
                    "id": 4614,
                    "name": "ExpressionStatement",
                    "src": "19470:28:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "initialRedemptionFee",
                              "referencedDeclaration": 3872,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4606,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4615,
                                "name": "Identifier",
                                "src": "19508:2:7"
                              }
                            ],
                            "id": 4617,
                            "name": "MemberAccess",
                            "src": "19508:23:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4618,
                            "name": "Literal",
                            "src": "19534:1:7"
                          }
                        ],
                        "id": 4619,
                        "name": "Assignment",
                        "src": "19508:27:7"
                      }
                    ],
                    "id": 4620,
                    "name": "ExpressionStatement",
                    "src": "19508:27:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "withdrawalRequestTime",
                              "referencedDeclaration": 3876,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4606,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4621,
                                "name": "Identifier",
                                "src": "19545:2:7"
                              }
                            ],
                            "id": 4623,
                            "name": "MemberAccess",
                            "src": "19545:24:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4624,
                            "name": "Literal",
                            "src": "19572:1:7"
                          }
                        ],
                        "id": 4625,
                        "name": "Assignment",
                        "src": "19545:28:7"
                      }
                    ],
                    "id": 4626,
                    "name": "ExpressionStatement",
                    "src": "19545:28:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "lastRequestedDigest",
                              "referencedDeclaration": 3878,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4606,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4627,
                                "name": "Identifier",
                                "src": "19583:2:7"
                              }
                            ],
                            "id": 4629,
                            "name": "MemberAccess",
                            "src": "19583:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes32)",
                                  "value": "bytes32"
                                },
                                "id": 4630,
                                "name": "ElementaryTypeNameExpression",
                                "src": "19608:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4631,
                                "name": "Literal",
                                "src": "19616:1:7"
                              }
                            ],
                            "id": 4632,
                            "name": "FunctionCall",
                            "src": "19608:10:7"
                          }
                        ],
                        "id": 4633,
                        "name": "Assignment",
                        "src": "19583:35:7"
                      }
                    ],
                    "id": 4634,
                    "name": "ExpressionStatement",
                    "src": "19583:35:7"
                  }
                ],
                "id": 4635,
                "name": "Block",
                "src": "19460:165:7"
              }
            ],
            "id": 4636,
            "name": "FunctionDefinition",
            "src": "19405:220:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Get the starting percentage of the bond at auction.\n @dev        This will return the same value regardless of collateral price.\n @return     The percentage of the InitialCollateralizationPercent that will result\n             in a 100% bond value base auction given perfect collateralization.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAuctionBasePercentage",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4652,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4637,
                        "name": "UserDefinedTypeName",
                        "src": "19999:7:7"
                      }
                    ],
                    "id": 4638,
                    "name": "VariableDeclaration",
                    "src": "19999:18:7"
                  }
                ],
                "id": 4639,
                "name": "ParameterList",
                "src": "19998:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4652,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4640,
                        "name": "ElementaryTypeName",
                        "src": "20066:7:7"
                      }
                    ],
                    "id": 4641,
                    "name": "VariableDeclaration",
                    "src": "20066:7:7"
                  }
                ],
                "id": 4642,
                "name": "ParameterList",
                "src": "20065:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4642
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "div",
                              "referencedDeclaration": 16833,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)",
                                      "value": "uint256"
                                    },
                                    "id": 4643,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "20096:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3130303030",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 10000",
                                      "value": "10000"
                                    },
                                    "id": 4644,
                                    "name": "Literal",
                                    "src": "20104:5:7"
                                  }
                                ],
                                "id": 4645,
                                "name": "FunctionCall",
                                "src": "20096:14:7"
                              }
                            ],
                            "id": 4646,
                            "name": "MemberAccess",
                            "src": "20096:18:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialCollateralizedPercent",
                              "referencedDeclaration": 3844,
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4638,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4647,
                                "name": "Identifier",
                                "src": "20115:2:7"
                              }
                            ],
                            "id": 4648,
                            "name": "MemberAccess",
                            "src": "20115:31:7"
                          }
                        ],
                        "id": 4649,
                        "name": "FunctionCall",
                        "src": "20096:51:7"
                      }
                    ],
                    "id": 4650,
                    "name": "Return",
                    "src": "20089:58:7"
                  }
                ],
                "id": 4651,
                "name": "Block",
                "src": "20079:75:7"
              }
            ],
            "id": 4652,
            "name": "FunctionDefinition",
            "src": "19965:189:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Seize the signer bond from the keep contract.\n @dev        we check our balance before and after.\n @return     The amount seized in wei.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "seizeSignerBonds",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4698,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4653,
                        "name": "UserDefinedTypeName",
                        "src": "20357:7:7"
                      }
                    ],
                    "id": 4654,
                    "name": "VariableDeclaration",
                    "src": "20357:18:7"
                  }
                ],
                "id": 4655,
                "name": "ParameterList",
                "src": "20356:20:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4698,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4656,
                        "name": "ElementaryTypeName",
                        "src": "20395:7:7"
                      }
                    ],
                    "id": 4657,
                    "name": "VariableDeclaration",
                    "src": "20395:7:7"
                  }
                ],
                "id": 4658,
                "name": "ParameterList",
                "src": "20394:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4660
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_preCallBalance",
                          "scope": 4697,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4659,
                            "name": "ElementaryTypeName",
                            "src": "20414:7:7"
                          }
                        ],
                        "id": 4660,
                        "name": "VariableDeclaration",
                        "src": "20414:23:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "balance",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                      "typeString": "library DepositUtils"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4661,
                                "name": "ElementaryTypeNameExpression",
                                "src": "20440:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18430,
                                  "type": "library DepositUtils",
                                  "value": "this"
                                },
                                "id": 4662,
                                "name": "Identifier",
                                "src": "20448:4:7"
                              }
                            ],
                            "id": 4663,
                            "name": "FunctionCall",
                            "src": "20440:13:7"
                          }
                        ],
                        "id": 4664,
                        "name": "MemberAccess",
                        "src": "20440:21:7"
                      }
                    ],
                    "id": 4665,
                    "name": "VariableDeclarationStatement",
                    "src": "20414:47:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4667
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_keep",
                          "scope": 4697,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IBondedECDSAKeep",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IBondedECDSAKeep",
                              "referencedDeclaration": 11428,
                              "type": "contract IBondedECDSAKeep"
                            },
                            "id": 4666,
                            "name": "UserDefinedTypeName",
                            "src": "20472:16:7"
                          }
                        ],
                        "id": 4667,
                        "name": "VariableDeclaration",
                        "src": "20472:22:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract IBondedECDSAKeep",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 11428,
                              "type": "type(contract IBondedECDSAKeep)",
                              "value": "IBondedECDSAKeep"
                            },
                            "id": 4668,
                            "name": "Identifier",
                            "src": "20497:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keepAddress",
                              "referencedDeclaration": 3858,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4654,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4669,
                                "name": "Identifier",
                                "src": "20514:2:7"
                              }
                            ],
                            "id": 4670,
                            "name": "MemberAccess",
                            "src": "20514:14:7"
                          }
                        ],
                        "id": 4671,
                        "name": "FunctionCall",
                        "src": "20497:32:7"
                      }
                    ],
                    "id": 4672,
                    "name": "VariableDeclarationStatement",
                    "src": "20472:57:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "seizeSignerBonds",
                              "referencedDeclaration": 11406,
                              "type": "function () external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4667,
                                  "type": "contract IBondedECDSAKeep",
                                  "value": "_keep"
                                },
                                "id": 4673,
                                "name": "Identifier",
                                "src": "20539:5:7"
                              }
                            ],
                            "id": 4675,
                            "name": "MemberAccess",
                            "src": "20539:22:7"
                          }
                        ],
                        "id": 4676,
                        "name": "FunctionCall",
                        "src": "20539:24:7"
                      }
                    ],
                    "id": 4677,
                    "name": "ExpressionStatement",
                    "src": "20539:24:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4679
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_postCallBalance",
                          "scope": 4697,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4678,
                            "name": "ElementaryTypeName",
                            "src": "20574:7:7"
                          }
                        ],
                        "id": 4679,
                        "name": "VariableDeclaration",
                        "src": "20574:24:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "balance",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                      "typeString": "library DepositUtils"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4680,
                                "name": "ElementaryTypeNameExpression",
                                "src": "20601:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18430,
                                  "type": "library DepositUtils",
                                  "value": "this"
                                },
                                "id": 4681,
                                "name": "Identifier",
                                "src": "20609:4:7"
                              }
                            ],
                            "id": 4682,
                            "name": "FunctionCall",
                            "src": "20601:13:7"
                          }
                        ],
                        "id": 4683,
                        "name": "MemberAccess",
                        "src": "20601:21:7"
                      }
                    ],
                    "id": 4684,
                    "name": "VariableDeclarationStatement",
                    "src": "20574:48:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_081d9d88cd751124b06bf4b926a19d0dbebc6fe63a06d6b69caa0dfa83662184",
                                  "typeString": "literal_string \"No funds received, unexpected\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4685,
                            "name": "Identifier",
                            "src": "20632:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4679,
                                  "type": "uint256",
                                  "value": "_postCallBalance"
                                },
                                "id": 4686,
                                "name": "Identifier",
                                "src": "20653:16:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4660,
                                  "type": "uint256",
                                  "value": "_preCallBalance"
                                },
                                "id": 4687,
                                "name": "Identifier",
                                "src": "20672:15:7"
                              }
                            ],
                            "id": 4688,
                            "name": "BinaryOperation",
                            "src": "20653:34:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f2066756e64732072656365697665642c20756e6578706563746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"No funds received, unexpected\"",
                              "value": "No funds received, unexpected"
                            },
                            "id": 4689,
                            "name": "Literal",
                            "src": "20701:31:7"
                          }
                        ],
                        "id": 4690,
                        "name": "FunctionCall",
                        "src": "20632:110:7"
                      }
                    ],
                    "id": 4691,
                    "name": "ExpressionStatement",
                    "src": "20632:110:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4658
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 16774,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4679,
                                  "type": "uint256",
                                  "value": "_postCallBalance"
                                },
                                "id": 4692,
                                "name": "Identifier",
                                "src": "20759:16:7"
                              }
                            ],
                            "id": 4693,
                            "name": "MemberAccess",
                            "src": "20759:20:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4660,
                              "type": "uint256",
                              "value": "_preCallBalance"
                            },
                            "id": 4694,
                            "name": "Identifier",
                            "src": "20780:15:7"
                          }
                        ],
                        "id": 4695,
                        "name": "FunctionCall",
                        "src": "20759:37:7"
                      }
                    ],
                    "id": 4696,
                    "name": "Return",
                    "src": "20752:44:7"
                  }
                ],
                "id": 4697,
                "name": "Block",
                "src": "20404:399:7"
              }
            ],
            "id": 4698,
            "name": "FunctionDefinition",
            "src": "20331:472:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Adds a given amount to the withdraw allowance for the address.\n @dev        Withdrawals can only happen when a contract is in an end-state.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "enableWithdrawal",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4722,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4699,
                        "name": "UserDefinedTypeName",
                        "src": "21011:20:7"
                      }
                    ],
                    "id": 4700,
                    "name": "VariableDeclaration",
                    "src": "21011:31:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_withdrawer",
                      "scope": 4722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4701,
                        "name": "ElementaryTypeName",
                        "src": "21052:7:7"
                      }
                    ],
                    "id": 4702,
                    "name": "VariableDeclaration",
                    "src": "21052:19:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 4722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4703,
                        "name": "ElementaryTypeName",
                        "src": "21081:7:7"
                      }
                    ],
                    "id": 4704,
                    "name": "VariableDeclaration",
                    "src": "21081:15:7"
                  }
                ],
                "id": 4705,
                "name": "ParameterList",
                "src": "21001:101:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4706,
                "name": "ParameterList",
                "src": "21112:0:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "withdrawableAmounts",
                                  "referencedDeclaration": 3888,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4700,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4707,
                                    "name": "Identifier",
                                    "src": "21122:2:7"
                                  }
                                ],
                                "id": 4710,
                                "name": "MemberAccess",
                                "src": "21122:22:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4702,
                                  "type": "address",
                                  "value": "_withdrawer"
                                },
                                "id": 4709,
                                "name": "Identifier",
                                "src": "21145:11:7"
                              }
                            ],
                            "id": 4711,
                            "name": "IndexAccess",
                            "src": "21122:35:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "add",
                                  "referencedDeclaration": 16749,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "withdrawableAmounts",
                                          "referencedDeclaration": 3888,
                                          "type": "mapping(address => uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4700,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 4712,
                                            "name": "Identifier",
                                            "src": "21160:2:7"
                                          }
                                        ],
                                        "id": 4713,
                                        "name": "MemberAccess",
                                        "src": "21160:22:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4702,
                                          "type": "address",
                                          "value": "_withdrawer"
                                        },
                                        "id": 4714,
                                        "name": "Identifier",
                                        "src": "21196:11:7"
                                      }
                                    ],
                                    "id": 4715,
                                    "name": "IndexAccess",
                                    "src": "21160:57:7"
                                  }
                                ],
                                "id": 4716,
                                "name": "MemberAccess",
                                "src": "21160:74:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4704,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 4717,
                                "name": "Identifier",
                                "src": "21235:7:7"
                              }
                            ],
                            "id": 4718,
                            "name": "FunctionCall",
                            "src": "21160:83:7"
                          }
                        ],
                        "id": 4719,
                        "name": "Assignment",
                        "src": "21122:121:7"
                      }
                    ],
                    "id": 4720,
                    "name": "ExpressionStatement",
                    "src": "21122:121:7"
                  }
                ],
                "id": 4721,
                "name": "Block",
                "src": "21112:138:7"
              }
            ],
            "id": 4722,
            "name": "FunctionDefinition",
            "src": "20976:274:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Withdraw caller's allowance.\n @dev        Withdrawals can only happen when a contract is in an end-state.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "withdrawFunds",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4785,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4723,
                        "name": "UserDefinedTypeName",
                        "src": "21412:20:7"
                      }
                    ],
                    "id": 4724,
                    "name": "VariableDeclaration",
                    "src": "21412:31:7"
                  }
                ],
                "id": 4725,
                "name": "ParameterList",
                "src": "21411:33:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4726,
                "name": "ParameterList",
                "src": "21454:0:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4728
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "available",
                          "scope": 4784,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4727,
                            "name": "ElementaryTypeName",
                            "src": "21464:7:7"
                          }
                        ],
                        "id": 4728,
                        "name": "VariableDeclaration",
                        "src": "21464:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdrawableAmounts",
                              "referencedDeclaration": 3888,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4724,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4729,
                                "name": "Identifier",
                                "src": "21484:2:7"
                              }
                            ],
                            "id": 4730,
                            "name": "MemberAccess",
                            "src": "21484:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4731,
                                "name": "Identifier",
                                "src": "21507:3:7"
                              }
                            ],
                            "id": 4732,
                            "name": "MemberAccess",
                            "src": "21507:10:7"
                          }
                        ],
                        "id": 4733,
                        "name": "IndexAccess",
                        "src": "21484:34:7"
                      }
                    ],
                    "id": 4734,
                    "name": "VariableDeclarationStatement",
                    "src": "21464:54:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_b821579830bae56c125ec04c2e4e961229ba3c15d8bfea25f42d7d221a978e12",
                                  "typeString": "literal_string \"Contract not yet terminated\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4735,
                            "name": "Identifier",
                            "src": "21529:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "inEndState",
                                  "referencedDeclaration": 3394,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4724,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4736,
                                    "name": "Identifier",
                                    "src": "21537:2:7"
                                  }
                                ],
                                "id": 4737,
                                "name": "MemberAccess",
                                "src": "21537:13:7"
                              }
                            ],
                            "id": 4738,
                            "name": "FunctionCall",
                            "src": "21537:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "436f6e7472616374206e6f7420796574207465726d696e61746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Contract not yet terminated\"",
                              "value": "Contract not yet terminated"
                            },
                            "id": 4739,
                            "name": "Literal",
                            "src": "21554:29:7"
                          }
                        ],
                        "id": 4740,
                        "name": "FunctionCall",
                        "src": "21529:55:7"
                      }
                    ],
                    "id": 4741,
                    "name": "ExpressionStatement",
                    "src": "21529:55:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1b19ac089d87f4146c293e731799080c98f8ee751187f94356e96cb0c086a394",
                                  "typeString": "literal_string \"Nothing to withdraw\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4742,
                            "name": "Identifier",
                            "src": "21594:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4728,
                                  "type": "uint256",
                                  "value": "available"
                                },
                                "id": 4743,
                                "name": "Identifier",
                                "src": "21602:9:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4744,
                                "name": "Literal",
                                "src": "21614:1:7"
                              }
                            ],
                            "id": 4745,
                            "name": "BinaryOperation",
                            "src": "21602:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f7468696e6720746f207769746864726177",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Nothing to withdraw\"",
                              "value": "Nothing to withdraw"
                            },
                            "id": 4746,
                            "name": "Literal",
                            "src": "21617:21:7"
                          }
                        ],
                        "id": 4747,
                        "name": "FunctionCall",
                        "src": "21594:45:7"
                      }
                    ],
                    "id": 4748,
                    "name": "ExpressionStatement",
                    "src": "21594:45:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ec83fd00432662dbf5dd2aac1f81c346fbe87acecf7cd3f016ab25f549f71749",
                                  "typeString": "literal_string \"Insufficient contract balance\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4749,
                            "name": "Identifier",
                            "src": "21649:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balance",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                              "typeString": "library DepositUtils"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 4750,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "21670:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18430,
                                          "type": "library DepositUtils",
                                          "value": "this"
                                        },
                                        "id": 4751,
                                        "name": "Identifier",
                                        "src": "21678:4:7"
                                      }
                                    ],
                                    "id": 4752,
                                    "name": "FunctionCall",
                                    "src": "21670:13:7"
                                  }
                                ],
                                "id": 4753,
                                "name": "MemberAccess",
                                "src": "21670:21:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4728,
                                  "type": "uint256",
                                  "value": "available"
                                },
                                "id": 4754,
                                "name": "Identifier",
                                "src": "21695:9:7"
                              }
                            ],
                            "id": 4755,
                            "name": "BinaryOperation",
                            "src": "21670:34:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "496e73756666696369656e7420636f6e74726163742062616c616e6365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Insufficient contract balance\"",
                              "value": "Insufficient contract balance"
                            },
                            "id": 4756,
                            "name": "Literal",
                            "src": "21718:31:7"
                          }
                        ],
                        "id": 4757,
                        "name": "FunctionCall",
                        "src": "21649:110:7"
                      }
                    ],
                    "id": 4758,
                    "name": "ExpressionStatement",
                    "src": "21649:110:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "withdrawableAmounts",
                                  "referencedDeclaration": 3888,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4724,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4759,
                                    "name": "Identifier",
                                    "src": "21812:2:7"
                                  }
                                ],
                                "id": 4763,
                                "name": "MemberAccess",
                                "src": "21812:22:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18360,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 4761,
                                    "name": "Identifier",
                                    "src": "21835:3:7"
                                  }
                                ],
                                "id": 4762,
                                "name": "MemberAccess",
                                "src": "21835:10:7"
                              }
                            ],
                            "id": 4764,
                            "name": "IndexAccess",
                            "src": "21812:34:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4765,
                            "name": "Literal",
                            "src": "21849:1:7"
                          }
                        ],
                        "id": 4766,
                        "name": "Assignment",
                        "src": "21812:38:7"
                      }
                    ],
                    "id": 4767,
                    "name": "ExpressionStatement",
                    "src": "21812:38:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4769,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "ok",
                          "scope": 4784,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4768,
                            "name": "ElementaryTypeName",
                            "src": "21924:4:7"
                          }
                        ],
                        "id": 4769,
                        "name": "VariableDeclaration",
                        "src": "21924:7:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(bool,bytes memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "function (bytes memory) payable returns (bool,bytes memory)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "call",
                                      "referencedDeclaration": null,
                                      "type": "function (bytes memory) payable returns (bool,bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sender",
                                          "referencedDeclaration": null,
                                          "type": "address payable"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 18360,
                                              "type": "msg",
                                              "value": "msg"
                                            },
                                            "id": 4770,
                                            "name": "Identifier",
                                            "src": "21937:3:7"
                                          }
                                        ],
                                        "id": 4771,
                                        "name": "MemberAccess",
                                        "src": "21937:10:7"
                                      }
                                    ],
                                    "id": 4772,
                                    "name": "MemberAccess",
                                    "src": "21937:15:7"
                                  }
                                ],
                                "id": 4773,
                                "name": "MemberAccess",
                                "src": "21937:21:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4728,
                                  "type": "uint256",
                                  "value": "available"
                                },
                                "id": 4774,
                                "name": "Identifier",
                                "src": "21959:9:7"
                              }
                            ],
                            "id": 4775,
                            "name": "FunctionCall",
                            "src": "21937:32:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 4776,
                            "name": "Literal",
                            "src": "21970:2:7"
                          }
                        ],
                        "id": 4777,
                        "name": "FunctionCall",
                        "src": "21937:36:7"
                      }
                    ],
                    "id": 4778,
                    "name": "VariableDeclarationStatement",
                    "src": "21923:50:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_2f5f005cb740539ee3516c799d64e633e99478206e886f7db1a394aade888067",
                                  "typeString": "literal_string \"Failed to send withdrawable amount to sender\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4779,
                            "name": "Identifier",
                            "src": "21983:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4769,
                              "type": "bool",
                              "value": "ok"
                            },
                            "id": 4780,
                            "name": "Identifier",
                            "src": "21991:2:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4661696c656420746f2073656e6420776974686472617761626c6520616d6f756e7420746f2073656e646572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Failed to send withdrawable amount to sender\"",
                              "value": "Failed to send withdrawable amount to sender"
                            },
                            "id": 4781,
                            "name": "Literal",
                            "src": "21995:46:7"
                          }
                        ],
                        "id": 4782,
                        "name": "FunctionCall",
                        "src": "21983:59:7"
                      }
                    ],
                    "id": 4783,
                    "name": "ExpressionStatement",
                    "src": "21983:59:7"
                  }
                ],
                "id": 4784,
                "name": "Block",
                "src": "21454:595:7"
              }
            ],
            "id": 4785,
            "name": "FunctionDefinition",
            "src": "21389:660:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Get the caller's withdraw allowance.\n @return     The caller's withdraw allowance in wei.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getWithdrawableAmount",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4799,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4786,
                        "name": "UserDefinedTypeName",
                        "src": "22203:20:7"
                      }
                    ],
                    "id": 4787,
                    "name": "VariableDeclaration",
                    "src": "22203:31:7"
                  }
                ],
                "id": 4788,
                "name": "ParameterList",
                "src": "22202:33:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4799,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4789,
                        "name": "ElementaryTypeName",
                        "src": "22283:7:7"
                      }
                    ],
                    "id": 4790,
                    "name": "VariableDeclaration",
                    "src": "22283:7:7"
                  }
                ],
                "id": 4791,
                "name": "ParameterList",
                "src": "22282:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4791
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "withdrawableAmounts",
                              "referencedDeclaration": 3888,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4787,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4792,
                                "name": "Identifier",
                                "src": "22313:2:7"
                              }
                            ],
                            "id": 4793,
                            "name": "MemberAccess",
                            "src": "22313:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18360,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4794,
                                "name": "Identifier",
                                "src": "22336:3:7"
                              }
                            ],
                            "id": 4795,
                            "name": "MemberAccess",
                            "src": "22336:10:7"
                          }
                        ],
                        "id": 4796,
                        "name": "IndexAccess",
                        "src": "22313:34:7"
                      }
                    ],
                    "id": 4797,
                    "name": "Return",
                    "src": "22306:41:7"
                  }
                ],
                "id": 4798,
                "name": "Block",
                "src": "22296:58:7"
              }
            ],
            "id": 4799,
            "name": "FunctionDefinition",
            "src": "22172:182:7"
          },
          {
            "attributes": {
              "documentation": "@notice     Distributes the fee rebate to the Fee Rebate Token owner.\n @dev        Whenever this is called we are shutting down.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "distributeFeeRebate",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4843,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4800,
                        "name": "UserDefinedTypeName",
                        "src": "22533:7:7"
                      }
                    ],
                    "id": 4801,
                    "name": "VariableDeclaration",
                    "src": "22533:18:7"
                  }
                ],
                "id": 4802,
                "name": "ParameterList",
                "src": "22532:20:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4803,
                "name": "ParameterList",
                "src": "22562:0:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4805
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "rebateTokenHolder",
                          "scope": 4842,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 4804,
                            "name": "ElementaryTypeName",
                            "src": "22572:7:7"
                          }
                        ],
                        "id": 4805,
                        "name": "VariableDeclaration",
                        "src": "22572:25:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address payable",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4582,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)",
                              "value": "feeRebateTokenHolder"
                            },
                            "id": 4806,
                            "name": "Identifier",
                            "src": "22600:20:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4801,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 4807,
                            "name": "Identifier",
                            "src": "22621:2:7"
                          }
                        ],
                        "id": 4808,
                        "name": "FunctionCall",
                        "src": "22600:24:7"
                      }
                    ],
                    "id": 4809,
                    "name": "VariableDeclarationStatement",
                    "src": "22572:52:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4805,
                              "type": "address",
                              "value": "rebateTokenHolder"
                            },
                            "id": 4810,
                            "name": "Identifier",
                            "src": "22709:17:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4811,
                                "name": "ElementaryTypeNameExpression",
                                "src": "22730:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4812,
                                "name": "Literal",
                                "src": "22738:1:7"
                              }
                            ],
                            "id": 4813,
                            "name": "FunctionCall",
                            "src": "22730:10:7"
                          }
                        ],
                        "id": 4814,
                        "name": "BinaryOperation",
                        "src": "22709:31:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "expression": null,
                              "functionReturnParameters": 4803
                            },
                            "id": 4815,
                            "name": "Return",
                            "src": "22756:7:7"
                          }
                        ],
                        "id": 4816,
                        "name": "Block",
                        "src": "22742:31:7"
                      }
                    ],
                    "id": 4817,
                    "name": "IfStatement",
                    "src": "22705:68:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balanceOf",
                                  "referencedDeclaration": 17007,
                                  "type": "function (address) view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "tbtcToken",
                                      "referencedDeclaration": 3830,
                                      "type": "contract TBTCToken"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4801,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 4818,
                                        "name": "Identifier",
                                        "src": "22836:2:7"
                                      }
                                    ],
                                    "id": 4819,
                                    "name": "MemberAccess",
                                    "src": "22836:12:7"
                                  }
                                ],
                                "id": 4820,
                                "name": "MemberAccess",
                                "src": "22836:22:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                          "typeString": "library DepositUtils"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 4821,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "22859:7:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 18430,
                                      "type": "library DepositUtils",
                                      "value": "this"
                                    },
                                    "id": 4822,
                                    "name": "Identifier",
                                    "src": "22867:4:7"
                                  }
                                ],
                                "id": 4823,
                                "name": "FunctionCall",
                                "src": "22859:13:7"
                              }
                            ],
                            "id": 4824,
                            "name": "FunctionCall",
                            "src": "22836:37:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4372,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                                  "value": "signerFeeTbtc"
                                },
                                "id": 4825,
                                "name": "Identifier",
                                "src": "22877:13:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4801,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4826,
                                "name": "Identifier",
                                "src": "22891:2:7"
                              }
                            ],
                            "id": 4827,
                            "name": "FunctionCall",
                            "src": "22877:17:7"
                          }
                        ],
                        "id": 4828,
                        "name": "BinaryOperation",
                        "src": "22836:58:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transfer",
                                      "referencedDeclaration": 17026,
                                      "type": "function (address,uint256) external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "tbtcToken",
                                          "referencedDeclaration": 3830,
                                          "type": "contract TBTCToken"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4801,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 4829,
                                            "name": "Identifier",
                                            "src": "22910:2:7"
                                          }
                                        ],
                                        "id": 4832,
                                        "name": "MemberAccess",
                                        "src": "22910:12:7"
                                      }
                                    ],
                                    "id": 4833,
                                    "name": "MemberAccess",
                                    "src": "22910:21:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4805,
                                      "type": "address",
                                      "value": "rebateTokenHolder"
                                    },
                                    "id": 4834,
                                    "name": "Identifier",
                                    "src": "22932:17:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                              "typeString": "struct DepositUtils.Deposit storage pointer"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4372,
                                          "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                                          "value": "signerFeeTbtc"
                                        },
                                        "id": 4835,
                                        "name": "Identifier",
                                        "src": "22951:13:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4801,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 4836,
                                        "name": "Identifier",
                                        "src": "22965:2:7"
                                      }
                                    ],
                                    "id": 4837,
                                    "name": "FunctionCall",
                                    "src": "22951:17:7"
                                  }
                                ],
                                "id": 4838,
                                "name": "FunctionCall",
                                "src": "22910:59:7"
                              }
                            ],
                            "id": 4839,
                            "name": "ExpressionStatement",
                            "src": "22910:59:7"
                          }
                        ],
                        "id": 4840,
                        "name": "Block",
                        "src": "22896:84:7"
                      }
                    ],
                    "id": 4841,
                    "name": "IfStatement",
                    "src": "22832:148:7"
                  }
                ],
                "id": 4842,
                "name": "Block",
                "src": "22562:424:7"
              }
            ],
            "id": 4843,
            "name": "FunctionDefinition",
            "src": "22504:482:7"
          },
          {
            "attributes": {
              "documentation": "@notice             Pushes ether held by the deposit to the signer group.\n @dev                Ether is returned to signing group members bonds.\n @param  _ethValue   The amount of ether to send.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "pushFundsToKeepGroup",
              "scope": 5103,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 4882,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4844,
                        "name": "UserDefinedTypeName",
                        "src": "23239:7:7"
                      }
                    ],
                    "id": 4845,
                    "name": "VariableDeclaration",
                    "src": "23239:18:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_ethValue",
                      "scope": 4882,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4846,
                        "name": "ElementaryTypeName",
                        "src": "23259:7:7"
                      }
                    ],
                    "id": 4847,
                    "name": "VariableDeclaration",
                    "src": "23259:17:7"
                  }
                ],
                "id": 4848,
                "name": "ParameterList",
                "src": "23238:39:7"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4849,
                "name": "ParameterList",
                "src": "23299:0:7"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9476531a76f04b5f2de46913967db55b84e39554821c5291fefd8f5b1d965ae8",
                                  "typeString": "literal_string \"Not enough funds to send\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4850,
                            "name": "Identifier",
                            "src": "23309:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balance",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                              "typeString": "library DepositUtils"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 4851,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "23317:7:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 18430,
                                          "type": "library DepositUtils",
                                          "value": "this"
                                        },
                                        "id": 4852,
                                        "name": "Identifier",
                                        "src": "23325:4:7"
                                      }
                                    ],
                                    "id": 4853,
                                    "name": "FunctionCall",
                                    "src": "23317:13:7"
                                  }
                                ],
                                "id": 4854,
                                "name": "MemberAccess",
                                "src": "23317:21:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4847,
                                  "type": "uint256",
                                  "value": "_ethValue"
                                },
                                "id": 4855,
                                "name": "Identifier",
                                "src": "23342:9:7"
                              }
                            ],
                            "id": 4856,
                            "name": "BinaryOperation",
                            "src": "23317:34:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4e6f7420656e6f7567682066756e647320746f2073656e64",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Not enough funds to send\"",
                              "value": "Not enough funds to send"
                            },
                            "id": 4857,
                            "name": "Literal",
                            "src": "23353:26:7"
                          }
                        ],
                        "id": 4858,
                        "name": "FunctionCall",
                        "src": "23309:71:7"
                      }
                    ],
                    "id": 4859,
                    "name": "ExpressionStatement",
                    "src": "23309:71:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4847,
                              "type": "uint256",
                              "value": "_ethValue"
                            },
                            "id": 4860,
                            "name": "Identifier",
                            "src": "23394:9:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4861,
                            "name": "Literal",
                            "src": "23406:1:7"
                          }
                        ],
                        "id": 4862,
                        "name": "BinaryOperation",
                        "src": "23394:13:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                4864
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "_keep",
                                  "scope": 4879,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "contract IBondedECDSAKeep",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "contractScope": null,
                                      "name": "IBondedECDSAKeep",
                                      "referencedDeclaration": 11428,
                                      "type": "contract IBondedECDSAKeep"
                                    },
                                    "id": 4863,
                                    "name": "UserDefinedTypeName",
                                    "src": "23423:16:7"
                                  }
                                ],
                                "id": 4864,
                                "name": "VariableDeclaration",
                                "src": "23423:22:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "contract IBondedECDSAKeep",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 11428,
                                      "type": "type(contract IBondedECDSAKeep)",
                                      "value": "IBondedECDSAKeep"
                                    },
                                    "id": 4865,
                                    "name": "Identifier",
                                    "src": "23448:16:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "keepAddress",
                                      "referencedDeclaration": 3858,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4845,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 4866,
                                        "name": "Identifier",
                                        "src": "23465:2:7"
                                      }
                                    ],
                                    "id": 4867,
                                    "name": "MemberAccess",
                                    "src": "23465:14:7"
                                  }
                                ],
                                "id": 4868,
                                "name": "FunctionCall",
                                "src": "23448:32:7"
                              }
                            ],
                            "id": 4869,
                            "name": "VariableDeclarationStatement",
                            "src": "23423:57:7"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "function () payable external",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "value",
                                          "referencedDeclaration": null,
                                          "type": "function (uint256) pure returns (function () payable external)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "returnPartialSignerBonds",
                                              "referencedDeclaration": 11409,
                                              "type": "function () payable external"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4864,
                                                  "type": "contract IBondedECDSAKeep",
                                                  "value": "_keep"
                                                },
                                                "id": 4870,
                                                "name": "Identifier",
                                                "src": "23494:5:7"
                                              }
                                            ],
                                            "id": 4873,
                                            "name": "MemberAccess",
                                            "src": "23494:30:7"
                                          }
                                        ],
                                        "id": 4874,
                                        "name": "MemberAccess",
                                        "src": "23494:36:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4847,
                                          "type": "uint256",
                                          "value": "_ethValue"
                                        },
                                        "id": 4875,
                                        "name": "Identifier",
                                        "src": "23531:9:7"
                                      }
                                    ],
                                    "id": 4876,
                                    "name": "FunctionCall",
                                    "src": "23494:47:7"
                                  }
                                ],
                                "id": 4877,
                                "name": "FunctionCall",
                                "src": "23494:49:7"
                              }
                            ],
                            "id": 4878,
                            "name": "ExpressionStatement",
                            "src": "23494:49:7"
                          }
                        ],
                        "id": 4879,
                        "name": "Block",
                        "src": "23409:145:7"
                      }
                    ],
                    "id": 4880,
                    "name": "IfStatement",
                    "src": "23390:164:7"
                  }
                ],
                "id": 4881,
                "name": "Block",
                "src": "23299:261:7"
              }
            ],
            "id": 4882,
            "name": "FunctionDefinition",
            "src": "23209:351:7"
          },
          {
            "attributes": {
              "documentation": "@notice Calculate TBTC amount required for redemption by a specified\n         _redeemer. If _assumeRedeemerHoldTdt is true, return the\n         requirement as if the redeemer holds this deposit's TDT.\n @dev Will revert if redemption is not possible by the current owner and\n      _assumeRedeemerHoldsTdt was not set. Setting\n      _assumeRedeemerHoldsTdt only when appropriate is the responsibility\n      of the caller; as such, this function should NEVER be publicly\n      exposed.\n @param _redeemer The account that should be treated as redeeming this\n        deposit  for the purposes of this calculation.\n @param _assumeRedeemerHoldsTdt If true, the calculation assumes that the\n        specified redeemer holds the TDT. If false, the calculation\n        checks the deposit owner against the specified _redeemer. Note\n        that this parameter should be false for all mutating calls to\n        preserve system correctness.\n @return A tuple of the amount the redeemer owes to the deposit to\n         initiate redemption, the amount that is owed to the TDT holder\n         when redemption is initiated, and the amount that is owed to the\n         FRT holder when redemption is initiated.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculateRedemptionTbtcAmounts",
              "scope": 5103,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_d",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct DepositUtils.Deposit",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "DepositUtils.Deposit",
                          "referencedDeclaration": 3893,
                          "type": "struct DepositUtils.Deposit"
                        },
                        "id": 4883,
                        "name": "UserDefinedTypeName",
                        "src": "24941:20:7"
                      }
                    ],
                    "id": 4884,
                    "name": "VariableDeclaration",
                    "src": "24941:31:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemer",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4885,
                        "name": "ElementaryTypeName",
                        "src": "24982:7:7"
                      }
                    ],
                    "id": 4886,
                    "name": "VariableDeclaration",
                    "src": "24982:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_assumeRedeemerHoldsTdt",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4887,
                        "name": "ElementaryTypeName",
                        "src": "25009:4:7"
                      }
                    ],
                    "id": 4888,
                    "name": "VariableDeclaration",
                    "src": "25009:28:7"
                  }
                ],
                "id": 4889,
                "name": "ParameterList",
                "src": "24931:112:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "owedToDeposit",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4890,
                        "name": "ElementaryTypeName",
                        "src": "25104:7:7"
                      }
                    ],
                    "id": 4891,
                    "name": "VariableDeclaration",
                    "src": "25104:21:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "owedToTdtHolder",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4892,
                        "name": "ElementaryTypeName",
                        "src": "25139:7:7"
                      }
                    ],
                    "id": 4893,
                    "name": "VariableDeclaration",
                    "src": "25139:23:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "owedToFrtHolder",
                      "scope": 5032,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4894,
                        "name": "ElementaryTypeName",
                        "src": "25176:7:7"
                      }
                    ],
                    "id": 4895,
                    "name": "VariableDeclaration",
                    "src": "25176:23:7"
                  }
                ],
                "id": 4896,
                "name": "ParameterList",
                "src": "25090:119:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4898
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "redeemerHoldsTdt",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4897,
                            "name": "ElementaryTypeName",
                            "src": "25224:4:7"
                          }
                        ],
                        "id": 4898,
                        "name": "VariableDeclaration",
                        "src": "25224:21:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "||",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4888,
                              "type": "bool",
                              "value": "_assumeRedeemerHoldsTdt"
                            },
                            "id": 4899,
                            "name": "Identifier",
                            "src": "25260:23:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                          "typeString": "struct DepositUtils.Deposit storage pointer"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4604,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)",
                                      "value": "depositOwner"
                                    },
                                    "id": 4900,
                                    "name": "Identifier",
                                    "src": "25287:12:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4884,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4901,
                                    "name": "Identifier",
                                    "src": "25300:2:7"
                                  }
                                ],
                                "id": 4902,
                                "name": "FunctionCall",
                                "src": "25287:16:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4886,
                                  "type": "address",
                                  "value": "_redeemer"
                                },
                                "id": 4903,
                                "name": "Identifier",
                                "src": "25307:9:7"
                              }
                            ],
                            "id": 4904,
                            "name": "BinaryOperation",
                            "src": "25287:29:7"
                          }
                        ],
                        "id": 4905,
                        "name": "BinaryOperation",
                        "src": "25260:56:7"
                      }
                    ],
                    "id": 4906,
                    "name": "VariableDeclarationStatement",
                    "src": "25224:92:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4908
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "preTerm",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4907,
                            "name": "ElementaryTypeName",
                            "src": "25326:4:7"
                          }
                        ],
                        "id": 4908,
                        "name": "VariableDeclaration",
                        "src": "25326:12:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                          "typeString": "struct DepositUtils.Deposit storage pointer"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4269,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                                      "value": "remainingTerm"
                                    },
                                    "id": 4909,
                                    "name": "Identifier",
                                    "src": "25341:13:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4884,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4910,
                                    "name": "Identifier",
                                    "src": "25355:2:7"
                                  }
                                ],
                                "id": 4911,
                                "name": "FunctionCall",
                                "src": "25341:17:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4912,
                                "name": "Literal",
                                "src": "25361:1:7"
                              }
                            ],
                            "id": 4913,
                            "name": "BinaryOperation",
                            "src": "25341:21:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "inCourtesyCall",
                                      "referencedDeclaration": 3564,
                                      "type": "function (struct DepositUtils.Deposit storage pointer) view returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4884,
                                          "type": "struct DepositUtils.Deposit storage pointer",
                                          "value": "_d"
                                        },
                                        "id": 4914,
                                        "name": "Identifier",
                                        "src": "25367:2:7"
                                      }
                                    ],
                                    "id": 4915,
                                    "name": "MemberAccess",
                                    "src": "25367:17:7"
                                  }
                                ],
                                "id": 4916,
                                "name": "FunctionCall",
                                "src": "25367:19:7"
                              }
                            ],
                            "id": 4917,
                            "name": "UnaryOperation",
                            "src": "25366:20:7"
                          }
                        ],
                        "id": 4918,
                        "name": "BinaryOperation",
                        "src": "25341:45:7"
                      }
                    ],
                    "id": 4919,
                    "name": "VariableDeclarationStatement",
                    "src": "25326:60:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_76fc0e450ff4f9f7423a63d9b733693ed89eecb2005b5e9b7e00120158b951eb",
                                  "typeString": "literal_string \"Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4920,
                            "name": "Identifier",
                            "src": "25397:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4898,
                                  "type": "bool",
                                  "value": "redeemerHoldsTdt"
                                },
                                "id": 4921,
                                "name": "Identifier",
                                "src": "25418:16:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4908,
                                      "type": "bool",
                                      "value": "preTerm"
                                    },
                                    "id": 4922,
                                    "name": "Identifier",
                                    "src": "25439:7:7"
                                  }
                                ],
                                "id": 4923,
                                "name": "UnaryOperation",
                                "src": "25438:8:7"
                              }
                            ],
                            "id": 4924,
                            "name": "BinaryOperation",
                            "src": "25418:28:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4f6e6c792054445420686f6c6465722063616e2072656465656d20756e6c657373206465706f7369742069732061742d7465726d206f7220696e20434f5552544553595f43414c4c",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL\"",
                              "value": "Only TDT holder can redeem unless deposit is at-term or in COURTESY_CALL"
                            },
                            "id": 4925,
                            "name": "Literal",
                            "src": "25460:74:7"
                          }
                        ],
                        "id": 4926,
                        "name": "FunctionCall",
                        "src": "25397:147:7"
                      }
                    ],
                    "id": 4927,
                    "name": "ExpressionStatement",
                    "src": "25397:147:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4929
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "frtExists",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4928,
                            "name": "ElementaryTypeName",
                            "src": "25555:4:7"
                          }
                        ],
                        "id": 4929,
                        "name": "VariableDeclaration",
                        "src": "25555:14:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4582,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)",
                                  "value": "feeRebateTokenHolder"
                                },
                                "id": 4930,
                                "name": "Identifier",
                                "src": "25572:20:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4884,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4931,
                                "name": "Identifier",
                                "src": "25593:2:7"
                              }
                            ],
                            "id": 4932,
                            "name": "FunctionCall",
                            "src": "25572:24:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4933,
                                "name": "ElementaryTypeNameExpression",
                                "src": "25600:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4934,
                                "name": "Literal",
                                "src": "25608:1:7"
                              }
                            ],
                            "id": 4935,
                            "name": "FunctionCall",
                            "src": "25600:10:7"
                          }
                        ],
                        "id": 4936,
                        "name": "BinaryOperation",
                        "src": "25572:38:7"
                      }
                    ],
                    "id": 4937,
                    "name": "VariableDeclarationStatement",
                    "src": "25555:55:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4939
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "redeemerHoldsFrt",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4938,
                            "name": "ElementaryTypeName",
                            "src": "25620:4:7"
                          }
                        ],
                        "id": 4939,
                        "name": "VariableDeclaration",
                        "src": "25620:21:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address payable",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                      "typeString": "struct DepositUtils.Deposit storage pointer"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4582,
                                  "type": "function (struct DepositUtils.Deposit storage pointer) view returns (address payable)",
                                  "value": "feeRebateTokenHolder"
                                },
                                "id": 4940,
                                "name": "Identifier",
                                "src": "25644:20:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4884,
                                  "type": "struct DepositUtils.Deposit storage pointer",
                                  "value": "_d"
                                },
                                "id": 4941,
                                "name": "Identifier",
                                "src": "25665:2:7"
                              }
                            ],
                            "id": 4942,
                            "name": "FunctionCall",
                            "src": "25644:24:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4886,
                              "type": "address",
                              "value": "_redeemer"
                            },
                            "id": 4943,
                            "name": "Identifier",
                            "src": "25672:9:7"
                          }
                        ],
                        "id": 4944,
                        "name": "BinaryOperation",
                        "src": "25644:37:7"
                      }
                    ],
                    "id": 4945,
                    "name": "VariableDeclarationStatement",
                    "src": "25620:61:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4947
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "signerFee",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4946,
                            "name": "ElementaryTypeName",
                            "src": "25691:7:7"
                          }
                        ],
                        "id": 4947,
                        "name": "VariableDeclaration",
                        "src": "25691:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4372,
                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                              "value": "signerFeeTbtc"
                            },
                            "id": 4948,
                            "name": "Identifier",
                            "src": "25711:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4884,
                              "type": "struct DepositUtils.Deposit storage pointer",
                              "value": "_d"
                            },
                            "id": 4949,
                            "name": "Identifier",
                            "src": "25725:2:7"
                          }
                        ],
                        "id": 4950,
                        "name": "FunctionCall",
                        "src": "25711:17:7"
                      }
                    ],
                    "id": 4951,
                    "name": "VariableDeclarationStatement",
                    "src": "25691:37:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4953
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "feeEscrow",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4952,
                            "name": "ElementaryTypeName",
                            "src": "25739:7:7"
                          }
                        ],
                        "id": 4953,
                        "name": "VariableDeclaration",
                        "src": "25739:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5102,
                              "type": "function (uint256,bool,bool,bool,bool) pure returns (uint256)",
                              "value": "calculateRedemptionFeeEscrow"
                            },
                            "id": 4954,
                            "name": "Identifier",
                            "src": "25771:28:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4947,
                              "type": "uint256",
                              "value": "signerFee"
                            },
                            "id": 4955,
                            "name": "Identifier",
                            "src": "25817:9:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4908,
                              "type": "bool",
                              "value": "preTerm"
                            },
                            "id": 4956,
                            "name": "Identifier",
                            "src": "25844:7:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4929,
                              "type": "bool",
                              "value": "frtExists"
                            },
                            "id": 4957,
                            "name": "Identifier",
                            "src": "25869:9:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4898,
                              "type": "bool",
                              "value": "redeemerHoldsTdt"
                            },
                            "id": 4958,
                            "name": "Identifier",
                            "src": "25896:16:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4939,
                              "type": "bool",
                              "value": "redeemerHoldsFrt"
                            },
                            "id": 4959,
                            "name": "Identifier",
                            "src": "25930:16:7"
                          }
                        ],
                        "id": 4960,
                        "name": "FunctionCall",
                        "src": "25771:189:7"
                      }
                    ],
                    "id": 4961,
                    "name": "VariableDeclarationStatement",
                    "src": "25739:221:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4891,
                              "type": "uint256",
                              "value": "owedToDeposit"
                            },
                            "id": 4962,
                            "name": "Identifier",
                            "src": "26069:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "add",
                                  "referencedDeclaration": 16749,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5049,
                                          "type": "function (uint256,bool) pure returns (uint256)",
                                          "value": "calculateBaseRedemptionCharge"
                                        },
                                        "id": 4963,
                                        "name": "Identifier",
                                        "src": "26085:29:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_Deposit_$3893_storage_ptr",
                                                  "typeString": "struct DepositUtils.Deposit storage pointer"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4356,
                                              "type": "function (struct DepositUtils.Deposit storage pointer) view returns (uint256)",
                                              "value": "lotSizeTbtc"
                                            },
                                            "id": 4964,
                                            "name": "Identifier",
                                            "src": "26128:11:7"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4884,
                                              "type": "struct DepositUtils.Deposit storage pointer",
                                              "value": "_d"
                                            },
                                            "id": 4965,
                                            "name": "Identifier",
                                            "src": "26140:2:7"
                                          }
                                        ],
                                        "id": 4966,
                                        "name": "FunctionCall",
                                        "src": "26128:15:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4898,
                                          "type": "bool",
                                          "value": "redeemerHoldsTdt"
                                        },
                                        "id": 4967,
                                        "name": "Identifier",
                                        "src": "26157:16:7"
                                      }
                                    ],
                                    "id": 4968,
                                    "name": "FunctionCall",
                                    "src": "26085:98:7"
                                  }
                                ],
                                "id": 4969,
                                "name": "MemberAccess",
                                "src": "26085:115:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4953,
                                  "type": "uint256",
                                  "value": "feeEscrow"
                                },
                                "id": 4970,
                                "name": "Identifier",
                                "src": "26201:9:7"
                              }
                            ],
                            "id": 4971,
                            "name": "FunctionCall",
                            "src": "26085:126:7"
                          }
                        ],
                        "id": 4972,
                        "name": "Assignment",
                        "src": "26069:142:7"
                      }
                    ],
                    "id": 4973,
                    "name": "ExpressionStatement",
                    "src": "26069:142:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4975
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "balance",
                          "scope": 5031,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4974,
                            "name": "ElementaryTypeName",
                            "src": "26328:7:7"
                          }
                        ],
                        "id": 4975,
                        "name": "VariableDeclaration",
                        "src": "26328:15:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "balanceOf",
                              "referencedDeclaration": 17007,
                              "type": "function (address) view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tbtcToken",
                                  "referencedDeclaration": 3830,
                                  "type": "contract TBTCToken"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4884,
                                      "type": "struct DepositUtils.Deposit storage pointer",
                                      "value": "_d"
                                    },
                                    "id": 4976,
                                    "name": "Identifier",
                                    "src": "26346:2:7"
                                  }
                                ],
                                "id": 4977,
                                "name": "MemberAccess",
                                "src": "26346:12:7"
                              }
                            ],
                            "id": 4978,
                            "name": "MemberAccess",
                            "src": "26346:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DepositUtils_$5103",
                                      "typeString": "library DepositUtils"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 4979,
                                "name": "ElementaryTypeNameExpression",
                                "src": "26369:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 18430,
                                  "type": "library DepositUtils",
                                  "value": "this"
                                },
                                "id": 4980,
                                "name": "Identifier",
                                "src": "26377:4:7"
                              }
                            ],
                            "id": 4981,
                            "name": "FunctionCall",
                            "src": "26369:13:7"
                          }
                        ],
                        "id": 4982,
                        "name": "FunctionCall",
                        "src": "26346:37:7"
                      }
                    ],
                    "id": 4983,
                    "name": "VariableDeclarationStatement",
                    "src": "26328:55:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4891,
                              "type": "uint256",
                              "value": "owedToDeposit"
                            },
                            "id": 4984,
                            "name": "Identifier",
                            "src": "26397:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4975,
                              "type": "uint256",
                              "value": "balance"
                            },
                            "id": 4985,
                            "name": "Identifier",
                            "src": "26413:7:7"
                          }
                        ],
                        "id": 4986,
                        "name": "BinaryOperation",
                        "src": "26397:23:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4891,
                                      "type": "uint256",
                                      "value": "owedToDeposit"
                                    },
                                    "id": 4987,
                                    "name": "Identifier",
                                    "src": "26436:13:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sub",
                                          "referencedDeclaration": 16774,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4891,
                                              "type": "uint256",
                                              "value": "owedToDeposit"
                                            },
                                            "id": 4988,
                                            "name": "Identifier",
                                            "src": "26452:13:7"
                                          }
                                        ],
                                        "id": 4989,
                                        "name": "MemberAccess",
                                        "src": "26452:17:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4975,
                                          "type": "uint256",
                                          "value": "balance"
                                        },
                                        "id": 4990,
                                        "name": "Identifier",
                                        "src": "26470:7:7"
                                      }
                                    ],
                                    "id": 4991,
                                    "name": "FunctionCall",
                                    "src": "26452:26:7"
                                  }
                                ],
                                "id": 4992,
                                "name": "Assignment",
                                "src": "26436:42:7"
                              }
                            ],
                            "id": 4993,
                            "name": "ExpressionStatement",
                            "src": "26436:42:7"
                          }
                        ],
                        "id": 4994,
                        "name": "Block",
                        "src": "26422:67:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4891,
                                      "type": "uint256",
                                      "value": "owedToDeposit"
                                    },
                                    "id": 4995,
                                    "name": "Identifier",
                                    "src": "26509:13:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4996,
                                    "name": "Literal",
                                    "src": "26525:1:7"
                                  }
                                ],
                                "id": 4997,
                                "name": "Assignment",
                                "src": "26509:17:7"
                              }
                            ],
                            "id": 4998,
                            "name": "ExpressionStatement",
                            "src": "26509:17:7"
                          }
                        ],
                        "id": 4999,
                        "name": "Block",
                        "src": "26495:42:7"
                      }
                    ],
                    "id": 5000,
                    "name": "IfStatement",
                    "src": "26393:144:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4908,
                                  "type": "bool",
                                  "value": "preTerm"
                                },
                                "id": 5001,
                                "name": "Identifier",
                                "src": "26931:7:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4929,
                                  "type": "bool",
                                  "value": "frtExists"
                                },
                                "id": 5002,
                                "name": "Identifier",
                                "src": "26942:9:7"
                              }
                            ],
                            "id": 5003,
                            "name": "BinaryOperation",
                            "src": "26931:20:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4939,
                                  "type": "bool",
                                  "value": "redeemerHoldsFrt"
                                },
                                "id": 5004,
                                "name": "Identifier",
                                "src": "26956:16:7"
                              }
                            ],
                            "id": 5005,
                            "name": "UnaryOperation",
                            "src": "26955:17:7"
                          }
                        ],
                        "id": 5006,
                        "name": "BinaryOperation",
                        "src": "26931:41:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4895,
                                      "type": "uint256",
                                      "value": "owedToFrtHolder"
                                    },
                                    "id": 5007,
                                    "name": "Identifier",
                                    "src": "26988:15:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4947,
                                      "type": "uint256",
                                      "value": "signerFee"
                                    },
                                    "id": 5008,
                                    "name": "Identifier",
                                    "src": "27006:9:7"
                                  }
                                ],
                                "id": 5009,
                                "name": "Assignment",
                                "src": "26988:27:7"
                              }
                            ],
                            "id": 5010,
                            "name": "ExpressionStatement",
                            "src": "26988:27:7"
                          }
                        ],
                        "id": 5011,
                        "name": "Block",
                        "src": "26974:52:7"
                      }
                    ],
                    "id": 5012,
                    "name": "IfStatement",
                    "src": "26927:99:7"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4893,
                              "type": "uint256",
                              "value": "owedToTdtHolder"
                            },
                            "id": 5013,
                            "name": "Identifier",
                            "src": "27089:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sub",
                                  "referencedDeclaration": 16774,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sub",
                                          "referencedDeclaration": 16774,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint256",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "add",
                                                  "referencedDeclaration": 16749,
                                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4975,
                                                      "type": "uint256",
                                                      "value": "balance"
                                                    },
                                                    "id": 5014,
                                                    "name": "Identifier",
                                                    "src": "27107:7:7"
                                                  }
                                                ],
                                                "id": 5015,
                                                "name": "MemberAccess",
                                                "src": "27107:11:7"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4891,
                                                  "type": "uint256",
                                                  "value": "owedToDeposit"
                                                },
                                                "id": 5016,
                                                "name": "Identifier",
                                                "src": "27119:13:7"
                                              }
                                            ],
                                            "id": 5017,
                                            "name": "FunctionCall",
                                            "src": "27107:26:7"
                                          }
                                        ],
                                        "id": 5018,
                                        "name": "MemberAccess",
                                        "src": "27107:30:7"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4947,
                                          "type": "uint256",
                                          "value": "signerFee"
                                        },
                                        "id": 5019,
                                        "name": "Identifier",
                                        "src": "27138:9:7"
                                      }
                                    ],
                                    "id": 5020,
                                    "name": "FunctionCall",
                                    "src": "27107:41:7"
                                  }
                                ],
                                "id": 5021,
                                "name": "MemberAccess",
                                "src": "27107:45:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4895,
                                  "type": "uint256",
                                  "value": "owedToFrtHolder"
                                },
                                "id": 5022,
                                "name": "Identifier",
                                "src": "27166:15:7"
                              }
                            ],
                            "id": 5023,
                            "name": "FunctionCall",
                            "src": "27107:84:7"
                          }
                        ],
                        "id": 5024,
                        "name": "Assignment",
                        "src": "27089:102:7"
                      }
                    ],
                    "id": 5025,
                    "name": "ExpressionStatement",
                    "src": "27089:102:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4896
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(uint256,uint256,uint256)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4891,
                              "type": "uint256",
                              "value": "owedToDeposit"
                            },
                            "id": 5026,
                            "name": "Identifier",
                            "src": "27210:13:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4893,
                              "type": "uint256",
                              "value": "owedToTdtHolder"
                            },
                            "id": 5027,
                            "name": "Identifier",
                            "src": "27225:15:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4895,
                              "type": "uint256",
                              "value": "owedToFrtHolder"
                            },
                            "id": 5028,
                            "name": "Identifier",
                            "src": "27242:15:7"
                          }
                        ],
                        "id": 5029,
                        "name": "TupleExpression",
                        "src": "27209:49:7"
                      }
                    ],
                    "id": 5030,
                    "name": "Return",
                    "src": "27202:56:7"
                  }
                ],
                "id": 5031,
                "name": "Block",
                "src": "25214:2051:7"
              }
            ],
            "id": 5032,
            "name": "FunctionDefinition",
            "src": "24892:2373:7"
          },
          {
            "attributes": {
              "documentation": "@notice                    Get the base TBTC amount needed to redeem.\n @param _lotSize   The lot size to use for the base redemption charge.\n @param _redeemerHoldsTdt   True if the redeemer is the TDT holder.\n @return                    The amount in TBTC.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculateBaseRedemptionCharge",
              "scope": 5103,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_lotSize",
                      "scope": 5049,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5033,
                        "name": "ElementaryTypeName",
                        "src": "27605:7:7"
                      }
                    ],
                    "id": 5034,
                    "name": "VariableDeclaration",
                    "src": "27605:16:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerHoldsTdt",
                      "scope": 5049,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5035,
                        "name": "ElementaryTypeName",
                        "src": "27631:4:7"
                      }
                    ],
                    "id": 5036,
                    "name": "VariableDeclaration",
                    "src": "27631:22:7"
                  }
                ],
                "id": 5037,
                "name": "ParameterList",
                "src": "27595:64:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5049,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5038,
                        "name": "ElementaryTypeName",
                        "src": "27683:7:7"
                      }
                    ],
                    "id": 5039,
                    "name": "VariableDeclaration",
                    "src": "27683:7:7"
                  }
                ],
                "id": 5040,
                "name": "ParameterList",
                "src": "27682:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5036,
                          "type": "bool",
                          "value": "_redeemerHoldsTdt"
                        },
                        "id": 5041,
                        "name": "Identifier",
                        "src": "27706:17:7"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5040
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5042,
                                "name": "Literal",
                                "src": "27746:1:7"
                              }
                            ],
                            "id": 5043,
                            "name": "Return",
                            "src": "27739:8:7"
                          }
                        ],
                        "id": 5044,
                        "name": "Block",
                        "src": "27725:33:7"
                      }
                    ],
                    "id": 5045,
                    "name": "IfStatement",
                    "src": "27702:56:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5040
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5034,
                          "type": "uint256",
                          "value": "_lotSize"
                        },
                        "id": 5046,
                        "name": "Identifier",
                        "src": "27774:8:7"
                      }
                    ],
                    "id": 5047,
                    "name": "Return",
                    "src": "27767:15:7"
                  }
                ],
                "id": 5048,
                "name": "Block",
                "src": "27692:97:7"
              }
            ],
            "id": 5049,
            "name": "FunctionDefinition",
            "src": "27557:232:7"
          },
          {
            "attributes": {
              "documentation": "@notice  Get fees owed for redemption\n @param signerFee The value of the signer fee for fee calculations.\n @param _preTerm               True if the Deposit is at-term or in courtesy_call.\n @param _frtExists     True if the FRT exists.\n @param _redeemerHoldsTdt     True if the the redeemer holds the TDT.\n @param _redeemerHoldsFrt     True if the redeemer holds the FRT.\n @return                      The fees owed in TBTC.",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "calculateRedemptionFeeEscrow",
              "scope": 5103,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "signerFee",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5050,
                        "name": "ElementaryTypeName",
                        "src": "28317:7:7"
                      }
                    ],
                    "id": 5051,
                    "name": "VariableDeclaration",
                    "src": "28317:17:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preTerm",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5052,
                        "name": "ElementaryTypeName",
                        "src": "28344:4:7"
                      }
                    ],
                    "id": 5053,
                    "name": "VariableDeclaration",
                    "src": "28344:13:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_frtExists",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5054,
                        "name": "ElementaryTypeName",
                        "src": "28367:4:7"
                      }
                    ],
                    "id": 5055,
                    "name": "VariableDeclaration",
                    "src": "28367:15:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerHoldsTdt",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5056,
                        "name": "ElementaryTypeName",
                        "src": "28392:4:7"
                      }
                    ],
                    "id": 5057,
                    "name": "VariableDeclaration",
                    "src": "28392:22:7"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_redeemerHoldsFrt",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5058,
                        "name": "ElementaryTypeName",
                        "src": "28424:4:7"
                      }
                    ],
                    "id": 5059,
                    "name": "VariableDeclaration",
                    "src": "28424:22:7"
                  }
                ],
                "id": 5060,
                "name": "ParameterList",
                "src": "28307:145:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5102,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5061,
                        "name": "ElementaryTypeName",
                        "src": "28476:7:7"
                      }
                    ],
                    "id": 5062,
                    "name": "VariableDeclaration",
                    "src": "28476:7:7"
                  }
                ],
                "id": 5063,
                "name": "ParameterList",
                "src": "28475:9:7"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5065
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "escrowRequiresFeeRebate",
                          "scope": 5101,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5064,
                            "name": "ElementaryTypeName",
                            "src": "28679:4:7"
                          }
                        ],
                        "id": 5065,
                        "name": "VariableDeclaration",
                        "src": "28679:28:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5053,
                                  "type": "bool",
                                  "value": "_preTerm"
                                },
                                "id": 5066,
                                "name": "Identifier",
                                "src": "28722:8:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5055,
                                  "type": "bool",
                                  "value": "_frtExists"
                                },
                                "id": 5067,
                                "name": "Identifier",
                                "src": "28734:10:7"
                              }
                            ],
                            "id": 5068,
                            "name": "BinaryOperation",
                            "src": "28722:22:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5059,
                                  "type": "bool",
                                  "value": "_redeemerHoldsFrt"
                                },
                                "id": 5069,
                                "name": "Identifier",
                                "src": "28749:17:7"
                              }
                            ],
                            "id": 5070,
                            "name": "UnaryOperation",
                            "src": "28748:18:7"
                          }
                        ],
                        "id": 5071,
                        "name": "BinaryOperation",
                        "src": "28722:44:7"
                      }
                    ],
                    "id": 5072,
                    "name": "VariableDeclarationStatement",
                    "src": "28679:87:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5074
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "escrowRequiresFee",
                          "scope": 5101,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5073,
                            "name": "ElementaryTypeName",
                            "src": "28777:4:7"
                          }
                        ],
                        "id": 5074,
                        "name": "VariableDeclaration",
                        "src": "28777:22:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "||",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5053,
                                  "type": "bool",
                                  "value": "_preTerm"
                                },
                                "id": 5075,
                                "name": "Identifier",
                                "src": "28814:8:7"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5055,
                                  "type": "bool",
                                  "value": "_frtExists"
                                },
                                "id": 5076,
                                "name": "Identifier",
                                "src": "28994:10:7"
                              }
                            ],
                            "id": 5077,
                            "name": "BinaryOperation",
                            "src": "28814:190:7"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5057,
                              "type": "bool",
                              "value": "_redeemerHoldsTdt"
                            },
                            "id": 5078,
                            "name": "Identifier",
                            "src": "29095:17:7"
                          }
                        ],
                        "id": 5079,
                        "name": "BinaryOperation",
                        "src": "28814:298:7"
                      }
                    ],
                    "id": 5080,
                    "name": "VariableDeclarationStatement",
                    "src": "28777:335:7"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5082
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "feeEscrow",
                          "scope": 5101,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5081,
                            "name": "ElementaryTypeName",
                            "src": "29123:7:7"
                          }
                        ],
                        "id": 5082,
                        "name": "VariableDeclaration",
                        "src": "29123:17:7"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 5083,
                        "name": "Literal",
                        "src": "29143:1:7"
                      }
                    ],
                    "id": 5084,
                    "name": "VariableDeclarationStatement",
                    "src": "29123:21:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5074,
                          "type": "bool",
                          "value": "escrowRequiresFee"
                        },
                        "id": 5085,
                        "name": "Identifier",
                        "src": "29158:17:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5082,
                                      "type": "uint256",
                                      "value": "feeEscrow"
                                    },
                                    "id": 5086,
                                    "name": "Identifier",
                                    "src": "29191:9:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5051,
                                      "type": "uint256",
                                      "value": "signerFee"
                                    },
                                    "id": 5087,
                                    "name": "Identifier",
                                    "src": "29204:9:7"
                                  }
                                ],
                                "id": 5088,
                                "name": "Assignment",
                                "src": "29191:22:7"
                              }
                            ],
                            "id": 5089,
                            "name": "ExpressionStatement",
                            "src": "29191:22:7"
                          }
                        ],
                        "id": 5090,
                        "name": "Block",
                        "src": "29177:47:7"
                      }
                    ],
                    "id": 5091,
                    "name": "IfStatement",
                    "src": "29154:70:7"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5065,
                          "type": "bool",
                          "value": "escrowRequiresFeeRebate"
                        },
                        "id": 5092,
                        "name": "Identifier",
                        "src": "29237:23:7"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5082,
                                      "type": "uint256",
                                      "value": "feeEscrow"
                                    },
                                    "id": 5093,
                                    "name": "Identifier",
                                    "src": "29276:9:7"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5051,
                                      "type": "uint256",
                                      "value": "signerFee"
                                    },
                                    "id": 5094,
                                    "name": "Identifier",
                                    "src": "29289:9:7"
                                  }
                                ],
                                "id": 5095,
                                "name": "Assignment",
                                "src": "29276:22:7"
                              }
                            ],
                            "id": 5096,
                            "name": "ExpressionStatement",
                            "src": "29276:22:7"
                          }
                        ],
                        "id": 5097,
                        "name": "Block",
                        "src": "29262:47:7"
                      }
                    ],
                    "id": 5098,
                    "name": "IfStatement",
                    "src": "29233:76:7"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5063
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5082,
                          "type": "uint256",
                          "value": "feeEscrow"
                        },
                        "id": 5099,
                        "name": "Identifier",
                        "src": "29326:9:7"
                      }
                    ],
                    "id": 5100,
                    "name": "Return",
                    "src": "29319:16:7"
                  }
                ],
                "id": 5101,
                "name": "Block",
                "src": "28485:857:7"
              }
            ],
            "id": 5102,
            "name": "FunctionDefinition",
            "src": "28270:1072:7"
          }
        ],
        "id": 5103,
        "name": "ContractDefinition",
        "src": "802:28542:7"
      }
    ],
    "id": 5104,
    "name": "SourceUnit",
    "src": "0:29345:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {
        "TBTCConstants": "0xb1cd05843856750cA058965511edfAA9E55cDF02"
      },
      "address": "0xc9077A33E13422358af7C873188a3E4A3D731A86",
      "transactionHash": "0x6251f42148a842adf94544b1a967ae10710b8dfb335495e7f5db819faeafe34d"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.167Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "auctionValue(DepositUtils.Deposit storage)": {
        "details": "We calculate the % of the auction that has elapsed, then scale the value up.",
        "params": {
          "_d": "Deposit storage pointer."
        },
        "return": "The value in wei to distribute in the auction at the current time."
      },
      "bytes8LEToUint(bytes8)": {
        "details": "Do this by converting to bytes, then reversing endianness, then converting to int.",
        "return": "The uint256 represented in LE by the bytes8."
      },
      "checkProofFromTxId(DepositUtils.Deposit storage,bytes32,bytes,uint256,bytes)": {
        "details": "Stateless SPV Proof verification documented elsewhere (see https://github.com/summa-tx/bitcoin-spv).",
        "params": {
          "_bitcoinHeaders": "An array of tightly-packed bitcoin headers.",
          "_d": "Deposit storage pointer.",
          "_merkleProof": "The merkle proof of inclusion of the tx in the bitcoin block.",
          "_txId": "The bitcoin txid of the tx that is purportedly included in the header chain.",
          "_txIndexInBlock": "The index of the tx in the Bitcoin block (0-indexed)."
        }
      },
      "compressPubkey(bytes32,bytes32)": {
        "details": "Converts the 64-byte key to a 33-byte key, bitcoin-style.",
        "params": {
          "_pubkeyX": "The X coordinate of the public key.",
          "_pubkeyY": "The Y coordinate of the public key."
        },
        "return": "The 33-byte compressed pubkey."
      },
      "currentBlockDifficulty(DepositUtils.Deposit storage)": {
        "details": "Calls the light relay and gets the current block difficulty.",
        "return": "The difficulty."
      },
      "depositOwner(DepositUtils.Deposit storage)": {
        "details": "We cast the address to a uint256 to match the 721 standard.",
        "return": "The current deposit beneficiary."
      },
      "determineCompressionPrefix(bytes32)": {
        "details": "The prefix encodes the parity of the Y coordinate.",
        "params": {
          "_pubkeyY": "The Y coordinate of the public key."
        },
        "return": "The 1-byte prefix for the compressed key."
      },
      "evaluateProofDifficulty(DepositUtils.Deposit storage,bytes)": {
        "details": "Uses the light oracle to source recent difficulty.",
        "params": {
          "_bitcoinHeaders": "The header chain to evaluate."
        },
        "return": "True if acceptable, otherwise revert."
      },
      "feeRebateTokenHolder(DepositUtils.Deposit storage)": {
        "return": "The current token holder if the Token exists.                 address(0) if the token does not exist."
      },
      "fetchBitcoinPrice(DepositUtils.Deposit storage)": {
        "details": "Polls the price feed via the system contract.",
        "return": "The current price of 1 sat in wei."
      },
      "fetchBondAmount(DepositUtils.Deposit storage)": {
        "details": "Calls the keep contract to do so.",
        "return": "The amount of bonded ETH in wei."
      },
      "findAndParseFundingOutput(DepositUtils.Deposit storage,bytes,uint8)": {
        "details": "Gets `_fundingOutputIndex` output from the output vector and validates if it is                             a p2wpkh output with public key hash matching this deposit's public key hash.",
        "params": {
          "_d": "Deposit storage pointer.",
          "_fundingOutputIndex": "Index of funding output in _txOutputVector.",
          "_txOutputVector": "All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC outputs."
        },
        "return": "Funding value."
      },
      "lotSizeTbtc(DepositUtils.Deposit storage)": {
        "return": "uint256 lot size in 10**18 decimals."
      },
      "previousBlockDifficulty(DepositUtils.Deposit storage)": {
        "details": "Calls the light relay and gets the previous block difficulty.",
        "return": "The difficulty."
      },
      "redemptionTeardown(DepositUtils.Deposit storage)": {
        "details": "We keep around the redeemer address so we can pay them out."
      },
      "remainingTerm(DepositUtils.Deposit storage)": {
        "details": "The return value is not guaranteed since block.timestmap can be lightly manipulated by miners.",
        "return": "The remaining term of the deposit in seconds. 0 if already at term"
      },
      "signerFeeTbtc(DepositUtils.Deposit storage)": {
        "details": "Signers are paid based on the TBTC issued.",
        "return": "Accumulated fees in 10**18 decimals."
      },
      "signerPKH(DepositUtils.Deposit storage)": {
        "details": "This is used in bitcoin output scripts for the signers.",
        "return": "20-bytes public key hash."
      },
      "signerPubkey(DepositUtils.Deposit storage)": {
        "details": "We store it as 2 bytes32, (2 slots) then repack it on demand.",
        "return": "64 byte public key."
      },
      "utxoValue(DepositUtils.Deposit storage)": {
        "details": "We store the deposit as bytes8 to make signature checking easier.",
        "return": "UTXO value in satoshi."
      },
      "validateAndParseFundingSPVProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "details": "Takes a pre-parsed transaction and calculates values needed to verify funding.",
        "params": {
          "_bitcoinHeaders": "Single bytestring of 80-byte bitcoin headers, lowest height first.",
          "_d": "Deposit storage pointer.",
          "_fundingOutputIndex": "Index of funding output in _txOutputVector (0-indexed).",
          "_merkleProof": "The merkle proof of transaction inclusion in a block.",
          "_txIndexInBlock": "Transaction index in the block (0-indexed).",
          "_txInputVector": "All transaction inputs prepended by the number of inputs encoded as a VarInt, max 0xFC(252) inputs.",
          "_txLocktime": "Final 4 bytes of the transaction.",
          "_txOutputVector": "All transaction outputs prepended by the number of outputs encoded as a VarInt, max 0xFC(252) outputs.",
          "_txVersion": "Transaction version number (4-byte LE)."
        },
        "return": "The 8-byte LE UTXO size in satoshi, the 36byte outpoint."
      },
      "wasDigestApprovedForSigning(DepositUtils.Deposit storage,bytes32)": {
        "details": "Identifies entry in the recorded approvals by keep ID and digest pair.",
        "params": {
          "_digest": "Digest to check approval for."
        },
        "return": "Timestamp from the moment of recording the digest for signing.                 Returns 0 if the digest was not approved for signing."
      }
    }
  },
  "userdoc": {
    "methods": {
      "auctionValue(DepositUtils.Deposit storage)": {
        "notice": "Calculates the amount of value at auction right now."
      },
      "bytes8LEToUint(bytes8)": {
        "notice": "Convert a LE bytes8 to a uint256."
      },
      "checkProofFromTxId(DepositUtils.Deposit storage,bytes32,bytes,uint256,bytes)": {
        "notice": "Syntactically check an SPV proof for a bitcoin transaction with its hash (ID)."
      },
      "compressPubkey(bytes32,bytes32)": {
        "notice": "Compresses a public key."
      },
      "currentBlockDifficulty(DepositUtils.Deposit storage)": {
        "notice": "Gets the current block difficulty."
      },
      "depositOwner(DepositUtils.Deposit storage)": {
        "notice": "Looks up the deposit beneficiary by calling the tBTC system."
      },
      "determineCompressionPrefix(bytes32)": {
        "notice": "Determines the prefix to the compressed public key."
      },
      "evaluateProofDifficulty(DepositUtils.Deposit storage,bytes)": {
        "notice": "Evaluates the header difficulties in a proof."
      },
      "feeRebateTokenHolder(DepositUtils.Deposit storage)": {
        "notice": "Looks up the Fee Rebate Token holder."
      },
      "fetchBitcoinPrice(DepositUtils.Deposit storage)": {
        "notice": "Gets the current price of Bitcoin in Ether."
      },
      "fetchBondAmount(DepositUtils.Deposit storage)": {
        "notice": "Fetches the Keep's bond amount in wei."
      },
      "findAndParseFundingOutput(DepositUtils.Deposit storage,bytes,uint8)": {
        "notice": "Find and validate funding output in transaction output vector using the index."
      },
      "lotSizeTbtc(DepositUtils.Deposit storage)": {
        "notice": "Gets the lot size in erc20 decimal places (max 18)"
      },
      "previousBlockDifficulty(DepositUtils.Deposit storage)": {
        "notice": "Gets the previous block difficulty."
      },
      "redemptionTeardown(DepositUtils.Deposit storage)": {
        "notice": "Deletes state after termination of redemption process."
      },
      "remainingTerm(DepositUtils.Deposit storage)": {
        "notice": "Retreive the remaining term of the deposit"
      },
      "signerFeeTbtc(DepositUtils.Deposit storage)": {
        "notice": "Determines the fees due to the signers for work performed."
      },
      "signerPKH(DepositUtils.Deposit storage)": {
        "notice": "Returns the Bitcoin pubkeyhash (hash160) for the signing group."
      },
      "signerPubkey(DepositUtils.Deposit storage)": {
        "notice": "Returns the packed public key (64 bytes) for the signing group."
      },
      "utxoValue(DepositUtils.Deposit storage)": {
        "notice": "Returns the size of the deposit UTXO in satoshi."
      },
      "validateAndParseFundingSPVProof(DepositUtils.Deposit storage,bytes4,bytes,bytes,bytes4,uint8,bytes,uint256,bytes)": {
        "notice": "Validates the funding tx and parses information from it."
      },
      "wasDigestApprovedForSigning(DepositUtils.Deposit storage,bytes32)": {
        "notice": "Gets timestamp of digest approval for signing."
      }
    }
  }
}