{
  "contractName": "TestnetRelay",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentEpochDifficulty",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getBestKnownDigest",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nextID",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "latestValidatedTx",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPrevEpochDifficulty",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "name": "_left",
          "type": "bytes32"
        },
        {
          "name": "_right",
          "type": "bytes32"
        },
        {
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "isMostRecentAncestor",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_digest",
          "type": "bytes32"
        },
        {
          "name": "_offset",
          "type": "uint256"
        }
      ],
      "name": "findAncestor",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "cancelRequest",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_digest",
          "type": "bytes32"
        }
      ],
      "name": "findHeight",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_anchor",
          "type": "bytes"
        },
        {
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeaders",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "HEIGHT_INTERVAL",
      "outputs": [
        {
          "name": "",
          "type": "uint32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "name": "_currentBest",
          "type": "bytes"
        },
        {
          "name": "_newBest",
          "type": "bytes"
        },
        {
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "markNewHeaviest",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_oldPeriodStartHeader",
          "type": "bytes"
        },
        {
          "name": "_oldPeriodEndHeader",
          "type": "bytes"
        },
        {
          "name": "_headers",
          "type": "bytes"
        }
      ],
      "name": "addHeadersWithRetarget",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spends",
          "type": "bytes"
        },
        {
          "name": "_pays",
          "type": "bytes"
        },
        {
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "name": "_consumer",
          "type": "address"
        },
        {
          "name": "_numConfs",
          "type": "uint8"
        },
        {
          "name": "_notBefore",
          "type": "uint256"
        }
      ],
      "name": "request",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BASE_COST",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "remoteGasAllowance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLatestValidatedTx",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_header",
          "type": "bytes"
        },
        {
          "name": "_proof",
          "type": "bytes"
        },
        {
          "name": "_version",
          "type": "bytes4"
        },
        {
          "name": "_locktime",
          "type": "bytes4"
        },
        {
          "name": "_index",
          "type": "uint256"
        },
        {
          "name": "_reqIndices",
          "type": "uint16"
        },
        {
          "name": "_vin",
          "type": "bytes"
        },
        {
          "name": "_vout",
          "type": "bytes"
        },
        {
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "provideProof",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "name": "_left",
          "type": "bytes"
        },
        {
          "name": "_right",
          "type": "bytes"
        }
      ],
      "name": "heaviestFromAncestor",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_ancestor",
          "type": "bytes32"
        },
        {
          "name": "_descendant",
          "type": "bytes32"
        },
        {
          "name": "_limit",
          "type": "uint256"
        }
      ],
      "name": "isAncestor",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getLastReorgCommonAncestor",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "getRequest",
      "outputs": [
        {
          "name": "spends",
          "type": "bytes32"
        },
        {
          "name": "pays",
          "type": "bytes32"
        },
        {
          "name": "paysValue",
          "type": "uint64"
        },
        {
          "name": "state",
          "type": "uint8"
        },
        {
          "name": "consumer",
          "type": "address"
        },
        {
          "name": "owner",
          "type": "address"
        },
        {
          "name": "numConfs",
          "type": "uint8"
        },
        {
          "name": "notBefore",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRelayGenesis",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_genesisHeader",
          "type": "bytes"
        },
        {
          "name": "_height",
          "type": "uint256"
        },
        {
          "name": "_periodStart",
          "type": "bytes32"
        },
        {
          "name": "_firstID",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_first",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_last",
          "type": "bytes32"
        }
      ],
      "name": "Extension",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_from",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_to",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_gcd",
          "type": "bytes32"
        }
      ],
      "name": "Reorg",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_requester",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_requestID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_paysValue",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "_spends",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "_pays",
          "type": "bytes"
        }
      ],
      "name": "NewProofRequest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_txid",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_requestID",
          "type": "uint256"
        }
      ],
      "name": "RequestFilled",
      "type": "event"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"getCurrentEpochDifficulty\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getBestKnownDigest\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextID\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"latestValidatedTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPrevEpochDifficulty\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"name\":\"_left\",\"type\":\"bytes32\"},{\"name\":\"_right\",\"type\":\"bytes32\"},{\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"isMostRecentAncestor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_digest\",\"type\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\"}],\"name\":\"findAncestor\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"cancelRequest\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"findHeight\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_anchor\",\"type\":\"bytes\"},{\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeaders\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"HEIGHT_INTERVAL\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"name\":\"_currentBest\",\"type\":\"bytes\"},{\"name\":\"_newBest\",\"type\":\"bytes\"},{\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"markNewHeaviest\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oldPeriodStartHeader\",\"type\":\"bytes\"},{\"name\":\"_oldPeriodEndHeader\",\"type\":\"bytes\"},{\"name\":\"_headers\",\"type\":\"bytes\"}],\"name\":\"addHeadersWithRetarget\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spends\",\"type\":\"bytes\"},{\"name\":\"_pays\",\"type\":\"bytes\"},{\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"name\":\"_consumer\",\"type\":\"address\"},{\"name\":\"_numConfs\",\"type\":\"uint8\"},{\"name\":\"_notBefore\",\"type\":\"uint256\"}],\"name\":\"request\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BASE_COST\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"remoteGasAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLatestValidatedTx\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_header\",\"type\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\"},{\"name\":\"_version\",\"type\":\"bytes4\"},{\"name\":\"_locktime\",\"type\":\"bytes4\"},{\"name\":\"_index\",\"type\":\"uint256\"},{\"name\":\"_reqIndices\",\"type\":\"uint16\"},{\"name\":\"_vin\",\"type\":\"bytes\"},{\"name\":\"_vout\",\"type\":\"bytes\"},{\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"provideProof\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"name\":\"_left\",\"type\":\"bytes\"},{\"name\":\"_right\",\"type\":\"bytes\"}],\"name\":\"heaviestFromAncestor\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_ancestor\",\"type\":\"bytes32\"},{\"name\":\"_descendant\",\"type\":\"bytes32\"},{\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"isAncestor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getLastReorgCommonAncestor\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"getRequest\",\"outputs\":[{\"name\":\"spends\",\"type\":\"bytes32\"},{\"name\":\"pays\",\"type\":\"bytes32\"},{\"name\":\"paysValue\",\"type\":\"uint64\"},{\"name\":\"state\",\"type\":\"uint8\"},{\"name\":\"consumer\",\"type\":\"address\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"numConfs\",\"type\":\"uint8\"},{\"name\":\"notBefore\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRelayGenesis\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_genesisHeader\",\"type\":\"bytes\"},{\"name\":\"_height\",\"type\":\"uint256\"},{\"name\":\"_periodStart\",\"type\":\"bytes32\"},{\"name\":\"_firstID\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_first\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_last\",\"type\":\"bytes32\"}],\"name\":\"Extension\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_gcd\",\"type\":\"bytes32\"}],\"name\":\"Reorg\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_requester\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_requestID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_paysValue\",\"type\":\"uint64\"},{\"indexed\":false,\"name\":\"_spends\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"_pays\",\"type\":\"bytes\"}],\"name\":\"NewProofRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_txid\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_requestID\",\"type\":\"uint256\"}],\"name\":\"RequestFilled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"details\":\"We check integrity and consistency of the header chain\",\"params\":{\"_anchor\":\"The header immediately preceeding the new chain\",\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\"},\"return\":\"True if successfully written, error otherwise\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"details\":\"Checks the retarget, the heights, and the linkage\",\"params\":{\"_headers\":\"A tightly-packed list of 80-byte Bitcoin headers\",\"_oldPeriodEndHeader\":\"The last header in the difficulty period being closed\",\"_oldPeriodStartHeader\":\"The first header in the difficulty period being closed\"},\"return\":\"True if successfully written, error otherwise\"},\"cancelRequest(uint256)\":{\"details\":\"Prevents the relay from forwarding tx infromation\",\"params\":{\"_requestID\":\"The ID of the request to be cancelled\"},\"return\":\"True if succesful, error otherwise\"},\"findAncestor(bytes32,uint256)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"findHeight(bytes32)\":{\"details\":\"Will fail if the header is unknown\",\"params\":{\"_digest\":\"The header digest to search for\"},\"return\":\"The height of the header, or error if unknown\"},\"getBestKnownDigest()\":{\"details\":\"This updated only by calling markNewHeaviest\",\"return\":\"The hash of the best marked chain tip\"},\"getCurrentEpochDifficulty()\":{\"details\":\"This is updated when a new heavist header has a new diff\",\"return\":\"The difficulty of the bestKnownDigest\"},\"getLastReorgCommonAncestor()\":{\"details\":\"This is updated only by calling markNewHeaviest\",\"return\":\"The hash of the shared ancestor of the most recent fork\"},\"getPrevEpochDifficulty()\":{\"details\":\"This is updated when a difficulty change is accepted\",\"return\":\"The difficulty of the previous epoch\"},\"getRelayGenesis()\":{\"details\":\"This is an initialization parameter\",\"return\":\"The hash of the first block of the relay\"},\"getRequest(uint256)\":{\"details\":\"Requests ids are numerical\",\"params\":{\"_requestID\":\"The numerical ID of the request\"},\"return\":\"A tuple representation of the request struct\"},\"heaviestFromAncestor(bytes32,bytes,bytes)\":{\"details\":\"Does not support reorgs above 2017 blocks (:\",\"params\":{\"_ancestor\":\"The prospective shared ancestor\",\"_left\":\"A chain tip\",\"_right\":\"A chain tip\"},\"return\":\"true if it is the most recent common ancestor within _limit, false otherwise\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"details\":\"Limit the amount of lookups (and thus gas usage) with _limit\",\"params\":{\"_ancestor\":\"The prospective ancestor\",\"_descendant\":\"The descendant to check\",\"_limit\":\"The maximum number of blocks to check\"},\"return\":\"true if ancestor is at most limit blocks lower than descendant, otherwise false\"},\"isMostRecentAncestor(bytes32,bytes32,bytes32,uint256)\":{\"details\":\"Limit the amount of lookups (and thus gas usage) with _limit\",\"params\":{\"_ancestor\":\"The prospective shared ancestor\",\"_left\":\"A chain tip\",\"_limit\":\"The maximum number of blocks to check\",\"_right\":\"A chain tip\"},\"return\":\"true if it is the most recent common ancestor within _limit, false otherwise\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"details\":\"We don't check this AT ALL really. Don't use relays with bad genesis\",\"params\":{\"_ancestor\":\"The digest of the most recent common ancestor\",\"_currentBest\":\"The 80-byte header referenced by bestKnownDigest\",\"_limit\":\"Limit the amount of traversal of the chain\",\"_newBest\":\"The 80-byte header to mark as the new best\"},\"return\":\"True if successfully updates bestKnownDigest, error otherwise\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"details\":\"The caller must specify which inputs, which outputs, and which request\",\"params\":{\"_header\":\"The header containing the merkleroot committing to the tx\",\"_index\":\"The index of the tx in the merkle tree's leaves\",\"_locktime\":\"The tx locktime, always the last 4 bytes of the tx\",\"_proof\":\"The merkle proof intermediate nodes\",\"_reqIndices\":\"The input and output index to check against the request, packed\",\"_requestID\":\"The id of the request that has been triggered\",\"_version\":\"The tx version, always the first 4 bytes of the tx\",\"_vin\":\"The tx input vector\",\"_vout\":\"The tx output vector\"},\"return\":\"True if succesful, error otherwise\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"details\":\"The request can be a spent utxo and/or a created utxo\",\"params\":{\"_consumer\":\"The address of a ISPVConsumer exposing spv\",\"_notBefore\":\"A timestamp before which proofs are not accepted\",\"_numConfs\":\"The minimum number of Bitcoin confirmations to accept\",\"_pays\":\"An output script that must be paid in acceptable txns (optional)\",\"_paysValue\":\"A minimum value that must be paid to the output script (optional)\",\"_spends\":\"An outpoint that must be spent in acceptable txns (optional)\"},\"return\":\"A unique request ID.\"}}},\"userdoc\":{\"methods\":{\"addHeaders(bytes,bytes)\":{\"notice\":\"Adds headers to storage after validating\"},\"addHeadersWithRetarget(bytes,bytes,bytes)\":{\"notice\":\"Adds headers to storage, performs additional validation of retarget\"},\"cancelRequest(uint256)\":{\"notice\":\"Cancel a bitcoin event request.\"},\"findAncestor(bytes32,uint256)\":{\"notice\":\"Finds an ancestor for a block by its digest\"},\"findHeight(bytes32)\":{\"notice\":\"Finds the height of a header by its digest\"},\"getBestKnownDigest()\":{\"notice\":\"Getter for bestKnownDigest\"},\"getCurrentEpochDifficulty()\":{\"notice\":\"Getter for currentEpochDiff\"},\"getLastReorgCommonAncestor()\":{\"notice\":\"Getter for relayGenesis\"},\"getPrevEpochDifficulty()\":{\"notice\":\"Getter for prevEpochDiff\"},\"getRelayGenesis()\":{\"notice\":\"Getter for relayGenesis\"},\"getRequest(uint256)\":{\"notice\":\"Retrieve info about a request\"},\"heaviestFromAncestor(bytes32,bytes,bytes)\":{\"notice\":\"Decides which header is heaviest from the ancestor\"},\"isAncestor(bytes32,bytes32,uint256)\":{\"notice\":\"Checks if a digest is an ancestor of the current one\"},\"isMostRecentAncestor(bytes32,bytes32,bytes32,uint256)\":{\"notice\":\"Checks if a digest is an ancestor of the current one\"},\"markNewHeaviest(bytes32,bytes,bytes,uint256)\":{\"notice\":\"Gives a starting point for the relay\"},\"provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)\":{\"notice\":\"Provide a proof of a tx that satisfies some request\"},\"request(bytes,bytes,uint64,address,uint8,uint256)\":{\"notice\":\"Subscribe to a feed of Bitcoin txns matching a request\"}}}},\"settings\":{\"compilationTarget\":{\"/home/james/devel/relays/solidity/contracts/TestnetRelay.sol\":\"TestnetRelay\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/james/devel/relays/solidity/contracts/Interfaces.sol\":{\"keccak256\":\"0xf363523e1627604800ba2b23e856880d67eeb5080e8e3aba9ebf543a9628cdea\",\"urls\":[\"bzzr://13a822491ce326824153411a6c7b54aa7f72c442dbcfdc05634dd28630b04492\",\"dweb:/ipfs/QmVSo9QzHy7BwbY8p3tDoPArGhEGo29FijJEmpPswtL6Lo\"]},\"/home/james/devel/relays/solidity/contracts/OnDemandSPV.sol\":{\"keccak256\":\"0x189cd4f382ccb6d139f5ca5a331de2ae9fa70a4909d4f3ab5f48856e34d9cd76\",\"urls\":[\"bzzr://0b9180647711fba9b58221a8378a5f063b062742b8dad8f1fabb41c198707b48\",\"dweb:/ipfs/QmWYkKKWPNYug16NQJBxUjBMuQXmKRUoXw57rSjXTGE3uB\"]},\"/home/james/devel/relays/solidity/contracts/Relay.sol\":{\"keccak256\":\"0x91f24dd17a8c00da7ab462b64fd6820df7060156d4e2b6d79bf5b4538f265c33\",\"urls\":[\"bzzr://2e2736b7a8b6275451afb9d606392c14be20d51224c2265a21efef6c4e4bb338\",\"dweb:/ipfs/QmZZQCPHUdCyCZfRhpMQBRjKR8k7VDAwNaRo9BRYBWbDm2\"]},\"/home/james/devel/relays/solidity/contracts/TestnetRelay.sol\":{\"keccak256\":\"0x04883856ccd9e6688d757af666ab04f0ab5e56bbb2f500966da3b27f3031366b\",\"urls\":[\"bzzr://5add5a9d0738ca2d5d3ae4991d16e5d87302822ce3c449f9cd6ed0a425482ac8\",\"dweb:/ipfs/QmdVUw96EjBBks1cRnX6uCwXtsjJVR7P5zHhwaedjEfpFE\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BTCUtils.sol\":{\"keccak256\":\"0xc63829e9d674bb7bb98b264aff17add28db3c19d3ee0ef49531663491af8b087\",\"urls\":[\"bzzr://9a76af9995e01cb82228d6827801929b4697eb83fc60b44faa00d5e62c69ee2d\",\"dweb:/ipfs/QmYRRfdW9qyerUaEyHSEi7LY7WymkKUQQ61YQdxVorGdNW\"]},\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x16296b4a97cdac10bb9cd4666d29310fe25897b7644dc04ad053ae09d4aeea9c\",\"urls\":[\"bzzr://27b097b56c0dc070a4e80572e01ffc28d26d83490f56fe0947a4d62ab09e1c48\",\"dweb:/ipfs/QmXwiQCVL8MS3R2NDWwTozngTjrD3SmWmZ6fbNGgQiwdDd\"]},\"@summa-tx/bitcoin-spv-sol/contracts/SafeMath.sol\":{\"keccak256\":\"0x22d34c04c68c2a77ee83e2ef3756f6e6bad6ad675560d777e612315d7eb83935\",\"urls\":[\"bzzr://a3312aa9977669832679852788efb21430fa70e5779243861ac6400fdc72f3de\",\"dweb:/ipfs/QmWADdVTCSyvtgb76AxFFkAr9h9jbY57Mj5X6xiEqCqmMu\"]},\"@summa-tx/bitcoin-spv-sol/contracts/ValidateSPV.sol\":{\"keccak256\":\"0x1b26b6ec30dcf0adb9cd7a8035a6cf0a565e8e12f0adf9f0ccda1f6b78e453c1\",\"urls\":[\"bzzr://ac9acd02674dcf17e3d6b58322efbfb42111dac4332cd9ee31ba9c7b8aa9fb47\",\"dweb:/ipfs/QmcwStYYD1NMVRzwcRP4v6eCscbMLdpjp45itWnfBaVnkf\"]}},\"version\":1}",
  "bytecode": "0x60806040526207a120600b553480156200001857600080fd5b5060405162003ba038038062003ba0833981810160405260808110156200003e57600080fd5b8101908080516401000000008111156200005757600080fd5b820160208101848111156200006b57600080fd5b81516401000000008111828201871017156200008657600080fd5b50506020820151604083015160609093015182519295509093509084908490849084908490849084906050146200011e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53746f70206265696e672064756d620000000000000000000000000000000000604482015290519081900360640190fd5b600062000136846200021960201b620019481760201c565b905062ffffff82161562000196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018062003b63603d913960400191505060405180910390fd5b600081815560018290556002829055818152600460205260409020839055620001d26107e08406846200038460201b62002d0f1790919060201c565b6004600084815260200190815260200160002081905550620001ff84620003fc60201b6200266b1760201c565b60055550505060099190915550505050505050506200069d565b60006200037c600280846040518082805190602001908083835b60208310620002545780518252601f19909201916020918201910162000233565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801562000294573d6000803e3d6000fd5b5050506040513d6020811015620002aa57600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310620002f85780518252601f199092019160209182019101620002d7565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801562000338573d6000803e3d6000fd5b5050506040513d60208110156200034e57600080fd5b505160408051602081810193909352815180820384018152908201909152906200290662000425821b17901c565b90505b919050565b600082821115620003f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b60006200037c62000416836001600160e01b036200044516565b6001600160e01b03620004c516565b805160009082906200043c5750600090506200037f565b50506020015190565b60006060620004676048600385620004fd60201b62002bd6179092919060201c565b9050600083604b815181106200047957fe5b016020015160f81c90506000620004ac6200049d846001600160e01b03620005b716565b6001600160e01b036200064916565b6002199290920160ff166101000a909102949350505050565b60006200037c827bffff00000000000000000000000000000000000000000000000000006200068960201b620031b51790919060201c565b6060818301845110156200057257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536c696365206f7574206f6620626f756e647300000000000000000000000000604482015290519081900360640190fd5b604051905081604082010160405281815282840181038360208601018381015b80821015620005ad5781518383015260208201915062000592565b5050509392505050565b60608082516040519080825280601f01601f191660200182016040528015620005e7576020820181803883390190505b50905060005b835181101562000642578381815181106200060457fe5b602001015160f81c60f81b8260018387510303815181106200062257fe5b60200101906001600160f81b031916908160001a905350600101620005ed565b5092915050565b600080805b835181101562000642578060010184510360080260020a8482815181106200067257fe5b016020015160f81c0291909101906001016200064e565b60008183816200069557fe5b049392505050565b6134b680620006ad6000396000f3fe6080604052600436106101405760003560e01c806374c3a3a9116100b6578063ad401de61161006f578063ad401de6146106a9578063b25b9b001461083d578063b985621a1461090f578063c58242cd14610945578063c58343ef1461095a578063e3d8d8d8146109db57610140565b806374c3a3a91461038a5780637fa637fc1461045c5780639426323414610577578063a00d95261461066a578063a24022aa1461067f578063a882e8641461069457610140565b80632e4f161a116101085780632e4f161a146101bd57806330017b3b1461020d5780633015394c1461023d57806360b5c3901461026757806365da41b91461029157806370d53c181461035c57610140565b8063113764be146101425780631910d973146101695780631e96917d1461017e57806329798b96146101935780632b97be24146101a8575b005b34801561014e57600080fd5b506101576109f0565b60408051918252519081900360200190f35b34801561017557600080fd5b506101576109f6565b34801561018a57600080fd5b506101576109fc565b34801561019f57600080fd5b50610157610a02565b3480156101b457600080fd5b50610157610a08565b3480156101c957600080fd5b506101f9600480360360808110156101e057600080fd5b5080359060208101359060408101359060600135610a0e565b604080519115158252519081900360200190f35b34801561021957600080fd5b506101576004803603604081101561023057600080fd5b5080359060200135610a27565b34801561024957600080fd5b506101f96004803603602081101561026057600080fd5b5035610a3c565b34801561027357600080fd5b506101576004803603602081101561028a57600080fd5b5035610b5a565b34801561029d57600080fd5b506101f9600480360360408110156102b457600080fd5b810190602081018135600160201b8111156102ce57600080fd5b8201836020820111156102e057600080fd5b803590602001918460018302840111600160201b8311171561030157600080fd5b919390929091602081019035600160201b81111561031e57600080fd5b82018360208201111561033057600080fd5b803590602001918460018302840111600160201b8311171561035157600080fd5b509092509050610b65565b34801561036857600080fd5b50610371610bda565b6040805163ffffffff9092168252519081900360200190f35b34801561039657600080fd5b506101f9600480360360808110156103ad57600080fd5b81359190810190604081016020820135600160201b8111156103ce57600080fd5b8201836020820111156103e057600080fd5b803590602001918460018302840111600160201b8311171561040157600080fd5b919390929091602081019035600160201b81111561041e57600080fd5b82018360208201111561043057600080fd5b803590602001918460018302840111600160201b8311171561045157600080fd5b919350915035610bdf565b34801561046857600080fd5b506101f96004803603606081101561047f57600080fd5b810190602081018135600160201b81111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460018302840111600160201b831117156104cc57600080fd5b919390929091602081019035600160201b8111156104e957600080fd5b8201836020820111156104fb57600080fd5b803590602001918460018302840111600160201b8311171561051c57600080fd5b919390929091602081019035600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460018302840111600160201b8311171561056c57600080fd5b509092509050610c62565b34801561058357600080fd5b50610157600480360360c081101561059a57600080fd5b810190602081018135600160201b8111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111600160201b831117156105e757600080fd5b919390929091602081019035600160201b81111561060457600080fd5b82018360208201111561061657600080fd5b803590602001918460018302840111600160201b8311171561063757600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610d0b565b34801561067657600080fd5b50610157610d93565b34801561068b57600080fd5b50610157610d9a565b3480156106a057600080fd5b50610157610da0565b3480156106b557600080fd5b506101f960048036036101208110156106cd57600080fd5b810190602081018135600160201b8111156106e757600080fd5b8201836020820111156106f957600080fd5b803590602001918460018302840111600160201b8311171561071a57600080fd5b919390929091602081019035600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b8111156107af57600080fd5b8201836020820111156107c157600080fd5b803590602001918460018302840111600160201b831117156107e257600080fd5b919390929091602081019035600160201b8111156107ff57600080fd5b82018360208201111561081157600080fd5b803590602001918460018302840111600160201b8311171561083257600080fd5b919350915035610da6565b34801561084957600080fd5b506101576004803603606081101561086057600080fd5b81359190810190604081016020820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460018302840111600160201b831117156108b457600080fd5b919390929091602081019035600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050610fe0565b34801561091b57600080fd5b506101f96004803603606081101561093257600080fd5b5080359060208101359060400135611060565b34801561095157600080fd5b50610157611077565b34801561096657600080fd5b506109846004803603602081101561097d57600080fd5b503561107d565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b3480156109e757600080fd5b50610157611109565b60055490565b60015490565b60095481565b600a5481565b60065490565b6000610a1c8585858561110f565b90505b949350505050565b6000610a3383836111c0565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff166002811115610a6657fe5b14610aad576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610ad4575060048101546001600160a01b031633145b610b0f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806133cc602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b6000610a368261123c565b6000610a1c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092018290525092506112e7915050565b600481565b6000610c578787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152508892506112f3915050565b979650505050505050565b6000610c5787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506114ae92505050565b6000610d8689898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250899150889050876114ba565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610e1a8b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b1981840301815260049092019052965061194895505050505050565b60008181526007602052604090205490915060ff16610edc57610ebc8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250869150889050611a96565b506000818152600760205260409020805460ff19166001179055600a8190555b610f528888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250899250611bed915050565b50610fca818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250611f55915050565b5060019f9e505050505050505050505050505050565b60006110568686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061222c92505050565b9695505050505050565b600061106d848484612388565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff91041660028111156110cc57fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b6000838514801561111f57508285145b1561112c57506001610a1f565b8383818160005b8681101561118757898314611155576000838152600360205260409020549294505b89821461116f576000828152600360205260409020549193505b61118081600163ffffffff6123dd16565b9050611133565b508284141561119d576000945050505050610a1f565b8082146111b1576000945050505050610a1f565b50600198975050505050505050565b600082815b838110156111f65760009182526003602052604090912054906111ef81600163ffffffff6123dd16565b90506111c5565b5080610a33576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b60058110156112a957600082815260046020526040902054925082611277576000918252600360205260409091205490611291565b611287838263ffffffff6123dd16565b9350505050610b55565b6112a281600163ffffffff6123dd16565b9050611242565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b600061106d8484612435565b6000806112ff84611948565b9050600061130c86611948565b90506001548114611364576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b6000828152600360205260409020546113ba576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b6113c887600154848761110f565b6114035760405162461bcd60e51b81526004018080602001828103825260298152602001806134596029913960400191505060405180910390fd5b8161140f88888861222c565b1461144b5760405162461bcd60e51b81526004018080602001828103825260338152602001806133f66033913960400191505060405180910390fd5b6001829055600287905560006114608661266b565b905060055481146114715760058190555b8783837f26300f292d9603532a1503495d83156db6cb60433e0802cd3b8763b57f1d14d260405160405180910390a4506001979650505050505050565b600061106d8383612435565b600980546001810190915586516000919060248114806114d8575080155b61151c576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b875180158015906115445750600181038960008151811061153957fe5b016020015160f81c14155b156115ca578089604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061158c5780518252601f19909201916020918201910161156d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405298506001810190505b604051600060208083018281528c516060948e93602890910191908401908083835b6020831061160b5780518252601f1990920191602091820191016115ec565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061165a575060006116578261267e565b51115b8061166e5750600061166b82612891565b51115b6116bf576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008311806116ce5750600082115b611716576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558315611748578b5160208d012081555b821561175b578a5160208c012060018201555b67ffffffffffffffff8a16156117945760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff161180156117aa575060f18860ff16105b156117ca5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156117d857600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f8f604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561189b578181015183820152602001611883565b50505050905090810190601f1680156118c85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156118fb5781810151838201526020016118e3565b50505050905090810190601f1680156119285780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000610a36600280846040518082805190602001908083835b602083106119805780518252601f199092019160209182019101611961565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156119bf573d6000803e3d6000fd5b5050506040513d60208110156119d457600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310611a205780518252601f199092019160209182019101611a01565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611a5f573d6000803e3d6000fd5b5050506040513d6020811015611a7457600080fd5b5051604080516020818101939093528151808203909301835281019052612906565b6000611ab483611aad611aa889612924565b612906565b8787612939565b611afb576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b6000611b0687611948565b90506000611b12611077565b9050611b20828260f0612388565b611b71576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff1680611b97846129dd565b60ff1610156111b1576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b6000611bf8846129fa565b611c3f576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b611c4883612aa4565b611c90576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c83169288169190421015611d07576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff166002811115611d2357fe5b14611d6d576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590611eb6576060611d8d898663ffffffff612b4216565b90506000611d9a82612bc1565b600081518110611da657fe5b016020015160f81c905083611dc98360086001850160ff1663ffffffff612bd616565b8051906020012014611e22576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff16801580611e6157508067ffffffffffffffff16611e5484612c69565b67ffffffffffffffff1610155b611eb2576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b82548015801590611f43576060611ed38c8963ffffffff612c8e16565b9050811580611ef0575082611ee782612cfa565b80519060200120145b611f41576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b8381101561202d578181015183820152602001612015565b50505050905090810190601f16801561205a5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b8381101561208d578181015183820152602001612075565b50505050905090810190601f1680156120ba5780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106121205780518252601f199092019160209182019101612101565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106121845780518252601f199092019160209182019101612165565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d80600081146121e7576040519150601f19603f3d011682016040523d82523d6000602084013e6121ec565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b6000806122388561123c565b9050600061224d61224886611948565b61123c565b9050600061225d61224886611948565b905082821015801561226f5750828110155b6122aa5760405162461bcd60e51b81526004018080602001828103825260308152602001806134296030913960400191505060405180910390fd5b60006122d26107e085066122c6866107e063ffffffff6123dd16565b9063ffffffff612d0f16565b90508083108183108115826122e45750805b156122ff576122f289611948565b9650505050505050611070565b81801561230a575080155b15612318576122f288611948565b8180156123225750805b15612346578385101561233d5761233888611948565b6122f2565b6122f289611948565b6123646123528961266b565b6107e0865b069063ffffffff612d6c16565b6123796123708b61266b565b6107e088612357565b101561233d576122f288611948565b600082815b838110156123d157858214156123a857600192505050611070565b60009182526003602052604090912054906123ca81600163ffffffff6123dd16565b905061238d565b50600095945050505050565b81810182811015610a36576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b600080606060008061244687611948565b905060006124538261123c565b9050605087518161246057fe5b061561249d5760405162461bcd60e51b815260040180806020018281038252602b8152602001806133a1602b913960400191505060405180910390fd5b60005b60508851816124ab57fe5b04811015612629576124d66124c782605063ffffffff612d6c16565b8990605063ffffffff612bd616565b94506124eb826001830163ffffffff6123dd16565b95506124f685611948565b6000818152600360205260409020549094506125c35761251585612ddc565b6125456125408660405160200180828152602001915050604051602081830303815290604052612e35565b612ec2565b1115612598576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000848152600360205260409020839055600486066125c35760008481526004602052604090208690555b6125d3858463ffffffff612eff16565b61260e5760405162461bcd60e51b815260040180806020018281038252602681526020018061337b6026913960400191505060405180910390fd5b83925061262281600163ffffffff6123dd16565b90506124a0565b508261263489611948565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a3506001979650505050505050565b6000610a3661267983612ddc565b612f2b565b6060612693826009600163ffffffff612bd616565b60008151811061269f57fe5b016020015160f81c61272f57600060026126b884612bc1565b6000815181106126c457fe5b016020015160f81c0360ff169050806126e684600a600163ffffffff612bd616565b6000815181106126f257fe5b016020015160f81c14612715575050604080516020810190915260008152610b55565b61272783600b8363ffffffff612bd616565b915050610b55565b6000612744836008600363ffffffff612f4216565b60408051621976a960e81b815290519081900360030190209091508114156127fe5761277983600b600163ffffffff612bd616565b60008151811061278557fe5b60209101015160f81c60141415806127d05750604051808061222b60f21b815250600201905060405180910390206127cd6002855103600286612f429092919063ffffffff16565b14155b156127eb575050604080516020810190915260008152610b55565b61272783600c601463ffffffff612bd616565b604080516205ea4560ea1b8152905190819003600301902081141561287b57825161283690849060001901600163ffffffff612bd616565b60008151811061284257fe5b60209101015160f81c608714612868575050604080516020810190915260008152610b55565b61272783600b601463ffffffff612bd616565b5050604080516020810190915260008152919050565b60408051603560f91b81529051600191819003820190206060916128b9908490600990612f42565b146128d35750604080516020810190915260008152610b55565b60606128e883600a600163ffffffff612bd616565b9050611070600b6128f883612ec2565b85919063ffffffff612bd616565b8051600090829061291b575060009050610b55565b50506020015190565b6060610a36826024602063ffffffff612bd616565b60008385148015612948575081155b801561295357508251155b1561296057506001610a1f565b60608584866040516020018084815260200183805190602001908083835b6020831061299d5780518252601f19909201916020918201910161297e565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152939091019052509250611056915082905084612f9c565b60006129e88261123c565b6129f360015461123c565b0392915050565b6000600181612a1084828463ffffffff612bd616565b600081518110612a1c57fe5b016020015160f81c905060fd81101580612a37575060ff8116155b15612a4757600092505050610b55565b60005b8160ff168160ff161015612a9857612a78612a73848588510388612bd69092919063ffffffff16565b6130db565b8551930192831115612a905760009350505050610b55565b600101612a4a565b50508251149050919050565b6000600181612aba84828463ffffffff612bd616565b600081518110612ac657fe5b016020015160f81c905060fd81101580612ae1575060ff8116155b15612af157600092505050610b55565b60005b8160ff168160ff161015612a9857612b22612b1d848588510388612bd69092919063ffffffff16565b6130fe565b8551930192831115612b3a5760009350505050610b55565b600101612af4565b60606000816001825b8560ff168160ff161015612b8a57612b71828389510389612bd69092919063ffffffff16565b9250612b7c836130fe565b935090830190600101612b4b565b50612ba3818288510388612bd69092919063ffffffff16565b9150612bae826130fe565b925061105686828563ffffffff612bd616565b6060610a36826008600163ffffffff612bd616565b606081830184511015612c26576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051905081604082010160405281815282840181038360208601018381015b80821015612c5f57815183830152602082019150612c46565b5050509392505050565b60006060612c768361318b565b90506060612c8382612e35565b9050610a1f81612ec2565b60606000816001825b8560ff168160ff161015612cd657612cbd828389510389612bd69092919063ffffffff16565b9250612cc8836130db565b935090830190600101612c97565b50612cef818288510388612bd69092919063ffffffff16565b9150612bae826130db565b6060610a36826000602463ffffffff612bd616565b600082821115612d66576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b600082612d7b57506000610a36565b5081810281838281612d8957fe5b0414610a36576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60006060612df3836048600363ffffffff612bd616565b9050600083604b81518110612e0457fe5b016020015160f81c90506000612e1c61254084612e35565b6002199290920160ff166101000a909102949350505050565b60608082516040519080825280601f01601f191660200182016040528015612e64576020820181803883390190505b50905060005b8351811015612ebb57838181518110612e7f57fe5b602001015160f81c60f81b826001838751030381518110612e9c57fe5b60200101906001600160f81b031916908160001a905350600101612e6a565b5092915050565b600080805b8351811015612ebb578060010184510360080260020a848281518110612ee957fe5b016020015160f81c029190910190600101612ec7565b600080612f0e611aa8856131a0565b9050828114612f21576000915050610a36565b5060019392505050565b6000610a3661ffff60d01b8363ffffffff6131b516565b600081830184511015612f92576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b5091016020012090565b60006020835181612fa957fe5b0615612fb757506000610a36565b825160201415612fc957506001610a36565b825160401415612fdb57506000610a36565b82518290600090612ffd90611aa8908790601f1901602063ffffffff612bd616565b90506000613016611aa88783602063ffffffff612bd616565b905060015b865160019061303190602063ffffffff6131b516565b038110156130d15760028406600114156130895761308261305d8860208085029063ffffffff612bd616565b83604051602001808281526020019150506040516020818303038152906040526131c8565b91506130c5565b6040805160208082018590528251808303820181529183019092526130c2916130bd908a908581029063ffffffff612bd616565b6131c8565b91505b600193841c930161301b565b5014949350505050565b60008060006130e984613283565b60259190910160ff1601600401949350505050565b600080613114836008600163ffffffff612bd616565b60008151811061312057fe5b016020015160f81c905060fd811061317f576040805162461bcd60e51b815260206004820181905260248201527f4d756c74692d6279746520566172496e7473206e6f7420737570706f72746564604482015290519081900360640190fd5b60090160ff1692915050565b6060610a36826000600863ffffffff612bd616565b6060610a36826004602063ffffffff612bd616565b60008183816131c057fe5b049392505050565b6000610a3383836040516020018083805190602001908083835b602083106132015780518252601f1990920191602091820191016131e2565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132495780518252601f19909201916020918201910161322a565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052611948565b600080606061329b846024600163ffffffff612bd616565b905060006132a8826132fe565b9050600060ff82166132d057826000815181106132c157fe5b016020015160f81c90506132f3565b6132f06125406132eb88602560ff871663ffffffff612bd616565b612e35565b90505b909350915050915091565b60008160008151811061330d57fe5b60209101015160f81c60ff141561332657506008610b55565b8160008151811061333357fe5b60209101015160f81c60fe141561334c57506004610b55565b8160008151811061335957fe5b60209101015160f81c60fd141561337257506002610b55565b50600091905056fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e486561646572206172726179206c656e677468206d75737420626520646976697369626c6520627920383043616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a723058204b8e31a8aea3099c7d920fd5cb561eef5ba7e26ecba3d0ff610bddc5d56ffec164736f6c634300050a0032506572696f64207374617274206861736820646f6573206e6f74206861766520776f726b2e2048696e743a2077726f6e672062797465206f726465723f",
  "deployedBytecode": "0x6080604052600436106101405760003560e01c806374c3a3a9116100b6578063ad401de61161006f578063ad401de6146106a9578063b25b9b001461083d578063b985621a1461090f578063c58242cd14610945578063c58343ef1461095a578063e3d8d8d8146109db57610140565b806374c3a3a91461038a5780637fa637fc1461045c5780639426323414610577578063a00d95261461066a578063a24022aa1461067f578063a882e8641461069457610140565b80632e4f161a116101085780632e4f161a146101bd57806330017b3b1461020d5780633015394c1461023d57806360b5c3901461026757806365da41b91461029157806370d53c181461035c57610140565b8063113764be146101425780631910d973146101695780631e96917d1461017e57806329798b96146101935780632b97be24146101a8575b005b34801561014e57600080fd5b506101576109f0565b60408051918252519081900360200190f35b34801561017557600080fd5b506101576109f6565b34801561018a57600080fd5b506101576109fc565b34801561019f57600080fd5b50610157610a02565b3480156101b457600080fd5b50610157610a08565b3480156101c957600080fd5b506101f9600480360360808110156101e057600080fd5b5080359060208101359060408101359060600135610a0e565b604080519115158252519081900360200190f35b34801561021957600080fd5b506101576004803603604081101561023057600080fd5b5080359060200135610a27565b34801561024957600080fd5b506101f96004803603602081101561026057600080fd5b5035610a3c565b34801561027357600080fd5b506101576004803603602081101561028a57600080fd5b5035610b5a565b34801561029d57600080fd5b506101f9600480360360408110156102b457600080fd5b810190602081018135600160201b8111156102ce57600080fd5b8201836020820111156102e057600080fd5b803590602001918460018302840111600160201b8311171561030157600080fd5b919390929091602081019035600160201b81111561031e57600080fd5b82018360208201111561033057600080fd5b803590602001918460018302840111600160201b8311171561035157600080fd5b509092509050610b65565b34801561036857600080fd5b50610371610bda565b6040805163ffffffff9092168252519081900360200190f35b34801561039657600080fd5b506101f9600480360360808110156103ad57600080fd5b81359190810190604081016020820135600160201b8111156103ce57600080fd5b8201836020820111156103e057600080fd5b803590602001918460018302840111600160201b8311171561040157600080fd5b919390929091602081019035600160201b81111561041e57600080fd5b82018360208201111561043057600080fd5b803590602001918460018302840111600160201b8311171561045157600080fd5b919350915035610bdf565b34801561046857600080fd5b506101f96004803603606081101561047f57600080fd5b810190602081018135600160201b81111561049957600080fd5b8201836020820111156104ab57600080fd5b803590602001918460018302840111600160201b831117156104cc57600080fd5b919390929091602081019035600160201b8111156104e957600080fd5b8201836020820111156104fb57600080fd5b803590602001918460018302840111600160201b8311171561051c57600080fd5b919390929091602081019035600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460018302840111600160201b8311171561056c57600080fd5b509092509050610c62565b34801561058357600080fd5b50610157600480360360c081101561059a57600080fd5b810190602081018135600160201b8111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460018302840111600160201b831117156105e757600080fd5b919390929091602081019035600160201b81111561060457600080fd5b82018360208201111561061657600080fd5b803590602001918460018302840111600160201b8311171561063757600080fd5b919350915067ffffffffffffffff813516906001600160a01b036020820135169060ff6040820135169060600135610d0b565b34801561067657600080fd5b50610157610d93565b34801561068b57600080fd5b50610157610d9a565b3480156106a057600080fd5b50610157610da0565b3480156106b557600080fd5b506101f960048036036101208110156106cd57600080fd5b810190602081018135600160201b8111156106e757600080fd5b8201836020820111156106f957600080fd5b803590602001918460018302840111600160201b8311171561071a57600080fd5b919390929091602081019035600160201b81111561073757600080fd5b82018360208201111561074957600080fd5b803590602001918460018302840111600160201b8311171561076a57600080fd5b919390926001600160e01b0319833581169360208101359091169260408201359261ffff6060840135169260a081019060800135600160201b8111156107af57600080fd5b8201836020820111156107c157600080fd5b803590602001918460018302840111600160201b831117156107e257600080fd5b919390929091602081019035600160201b8111156107ff57600080fd5b82018360208201111561081157600080fd5b803590602001918460018302840111600160201b8311171561083257600080fd5b919350915035610da6565b34801561084957600080fd5b506101576004803603606081101561086057600080fd5b81359190810190604081016020820135600160201b81111561088157600080fd5b82018360208201111561089357600080fd5b803590602001918460018302840111600160201b831117156108b457600080fd5b919390929091602081019035600160201b8111156108d157600080fd5b8201836020820111156108e357600080fd5b803590602001918460018302840111600160201b8311171561090457600080fd5b509092509050610fe0565b34801561091b57600080fd5b506101f96004803603606081101561093257600080fd5b5080359060208101359060400135611060565b34801561095157600080fd5b50610157611077565b34801561096657600080fd5b506109846004803603602081101561097d57600080fd5b503561107d565b60408051988952602089019790975267ffffffffffffffff9095168787015260ff93841660608801526001600160a01b039283166080880152911660a08601521660c084015260e083015251908190036101000190f35b3480156109e757600080fd5b50610157611109565b60055490565b60015490565b60095481565b600a5481565b60065490565b6000610a1c8585858561110f565b90505b949350505050565b6000610a3383836111c0565b90505b92915050565b600081815260086020526040812060016004820154600160a01b900460ff166002811115610a6657fe5b14610aad576040805162461bcd60e51b815260206004820152601260248201527152657175657374206e6f742061637469766560701b604482015290519081900360640190fd5b60038101546001600160a01b0316331480610ad4575060048101546001600160a01b031633145b610b0f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806133cc602a913960400191505060405180910390fd5b60048101805460ff60a01b1916600160a11b17905560405183907f4287938c90f288c18d761d34c3a5ad998017f7e890a72628c9636bb82ea286bd90600090a260019150505b919050565b6000610a368261123c565b6000610a1c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092018290525092506112e7915050565b600481565b6000610c578787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284376000920191909152508892506112f3915050565b979650505050505050565b6000610c5787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b01819004810282018101909252898152925089915088908190840183828082843760009201919091525050604080516020601f8a0181900481028201810190925288815292508891508790819084018382808284376000920191909152506114ae92505050565b6000610d8689898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250899150889050876114ba565b9998505050505050505050565b6201518081565b600b5481565b600a5490565b600080610e1a8b888888888f60405160200180876001600160e01b0319166001600160e01b03191681526004018686808284379190910190508484808284376001600160e01b03199094169190930190815260408051601b1981840301815260049092019052965061194895505050505050565b60008181526007602052604090205490915060ff16610edc57610ebc8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250869150889050611a96565b506000818152600760205260409020805460ff19166001179055600a8190555b610f528888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250899250611bed915050565b50610fca818989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508a9250611f55915050565b5060019f9e505050505050505050505050505050565b60006110568686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061222c92505050565b9695505050505050565b600061106d848484612388565b90505b9392505050565b60025490565b600081815260086020526040812080546001820154600383015460048401549294919367ffffffffffffffff600160a01b928390041693839283928392839260ff91041660028111156110cc57fe5b600382015460048301546002909301549a9c999b50979990986001600160a01b03808a169993169750600160e01b90920460ff1695509350915050565b60005490565b6000838514801561111f57508285145b1561112c57506001610a1f565b8383818160005b8681101561118757898314611155576000838152600360205260409020549294505b89821461116f576000828152600360205260409020549193505b61118081600163ffffffff6123dd16565b9050611133565b508284141561119d576000945050505050610a1f565b8082146111b1576000945050505050610a1f565b50600198975050505050505050565b600082815b838110156111f65760009182526003602052604090912054906111ef81600163ffffffff6123dd16565b90506111c5565b5080610a33576040805162461bcd60e51b815260206004820152601060248201526f2ab735b737bbb71030b731b2b9ba37b960811b604482015290519081900360640190fd5b60008082815b60058110156112a957600082815260046020526040902054925082611277576000918252600360205260409091205490611291565b611287838263ffffffff6123dd16565b9350505050610b55565b6112a281600163ffffffff6123dd16565b9050611242565b506040805162461bcd60e51b815260206004820152600d60248201526c556e6b6e6f776e20626c6f636b60981b604482015290519081900360640190fd5b600061106d8484612435565b6000806112ff84611948565b9050600061130c86611948565b90506001548114611364576040805162461bcd60e51b815260206004820181905260248201527f50617373656420696e2062657374206973206e6f742062657374206b6e6f776e604482015290519081900360640190fd5b6000828152600360205260409020546113ba576040805162461bcd60e51b81526020600482015260136024820152722732bb903132b9ba1034b9903ab735b737bbb760691b604482015290519081900360640190fd5b6113c887600154848761110f565b6114035760405162461bcd60e51b81526004018080602001828103825260298152602001806134596029913960400191505060405180910390fd5b8161140f88888861222c565b1461144b5760405162461bcd60e51b81526004018080602001828103825260338152602001806133f66033913960400191505060405180910390fd5b6001829055600287905560006114608661266b565b905060055481146114715760058190555b8783837f26300f292d9603532a1503495d83156db6cb60433e0802cd3b8763b57f1d14d260405160405180910390a4506001979650505050505050565b600061106d8383612435565b600980546001810190915586516000919060248114806114d8575080155b61151c576040805162461bcd60e51b815260206004820152601060248201526f4e6f7420612076616c6964205554584f60801b604482015290519081900360640190fd5b875180158015906115445750600181038960008151811061153957fe5b016020015160f81c14155b156115ca578089604051602001808360ff1660ff1660f81b815260010182805190602001908083835b6020831061158c5780518252601f19909201916020918201910161156d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405298506001810190505b604051600060208083018281528c516060948e93602890910191908401908083835b6020831061160b5780518252601f1990920191602091820191016115ec565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050816000148061165a575060006116578261267e565b51115b8061166e5750600061166b82612891565b51115b6116bf576040805162461bcd60e51b815260206004820152601a60248201527f4e6f742061207374616e64617264206f75747075742074797065000000000000604482015290519081900360640190fd5b60008311806116ce5750600082115b611716576040805162461bcd60e51b8152602060048201526014602482015273139bc81c995c5d595cdd081cdc1958da599a595960621b604482015290519081900360640190fd5b60008481526008602052604090206004810180546001600160a01b031916331790558315611748578b5160208d012081555b821561175b578a5160208c012060018201555b67ffffffffffffffff8a16156117945760038101805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8d16021790555b60008860ff161180156117aa575060f18860ff16105b156117ca5760038101805460ff60e01b1916600160e01b60ff8b16021790555b86156117d857600281018790555b6003810180546001600160a01b0319166001600160a01b038b161790556004810180546001919060ff60a01b1916600160a01b83021790555084336001600160a01b03167ff6744579059b48cd66d2c2dfe223754f166f2200b6de2bc6e0d239cd52d1a8c48c8f8f604051808467ffffffffffffffff1667ffffffffffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561189b578181015183820152602001611883565b50505050905090810190601f1680156118c85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156118fb5781810151838201526020016118e3565b50505050905090810190601f1680156119285780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a350929a9950505050505050505050565b6000610a36600280846040518082805190602001908083835b602083106119805780518252601f199092019160209182019101611961565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156119bf573d6000803e3d6000fd5b5050506040513d60208110156119d457600080fd5b50516040805160208181019390935281518082038401815290820191829052805190928291908401908083835b60208310611a205780518252601f199092019160209182019101611a01565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611a5f573d6000803e3d6000fd5b5050506040513d6020811015611a7457600080fd5b5051604080516020818101939093528151808203909301835281019052612906565b6000611ab483611aad611aa889612924565b612906565b8787612939565b611afb576040805162461bcd60e51b81526020600482015260136024820152722130b21034b731b63ab9b4b7b710383937b7b360691b604482015290519081900360640190fd5b6000611b0687611948565b90506000611b12611077565b9050611b20828260f0612388565b611b71576040805162461bcd60e51b815260206004820152601b60248201527f47434420646f6573206e6f7420636f6e6669726d206865616465720000000000604482015290519081900360640190fd5b600084815260086020526040902060030154600160e01b900460ff1680611b97846129dd565b60ff1610156111b1576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420636f6e6669726d6174696f6e73000000000000604482015290519081900360640190fd5b6000611bf8846129fa565b611c3f576040805162461bcd60e51b8152602060048201526013602482015272159a5b881a5cc81b585b199bdc9b585d1d1959606a1b604482015290519081900360640190fd5b611c4883612aa4565b611c90576040805162461bcd60e51b8152602060048201526014602482015273159bdd5d081a5cc81b585b199bdc9b585d1d195960621b604482015290519081900360640190fd5b6000828152600860208190526040909120600281015460ff9288901c83169288169190421015611d07576040805162461bcd60e51b815260206004820152601e60248201527f52657175657374206973207375626d697474656420746f6f206561726c790000604482015290519081900360640190fd5b60016004820154600160a01b900460ff166002811115611d2357fe5b14611d6d576040805162461bcd60e51b815260206004820152601560248201527452657175657374206973206e6f742061637469766560581b604482015290519081900360640190fd5b60018101548015801590611eb6576060611d8d898663ffffffff612b4216565b90506000611d9a82612bc1565b600081518110611da657fe5b016020015160f81c905083611dc98360086001850160ff1663ffffffff612bd616565b8051906020012014611e22576040805162461bcd60e51b815260206004820152601b60248201527f446f6573206e6f74206d61746368207061797320726571756573740000000000604482015290519081900360640190fd5b6003850154600160a01b900467ffffffffffffffff16801580611e6157508067ffffffffffffffff16611e5484612c69565b67ffffffffffffffff1610155b611eb2576040805162461bcd60e51b815260206004820152601c60248201527f446f6573206e6f74206d617463682076616c7565207265717565737400000000604482015290519081900360640190fd5b5050505b82548015801590611f43576060611ed38c8963ffffffff612c8e16565b9050811580611ef0575082611ee782612cfa565b80519060200120145b611f41576040805162461bcd60e51b815260206004820152601d60248201527f446f6573206e6f74206d61746368207370656e64732072657175657374000000604482015290519081900360640190fd5b505b5060019b9a5050505050505050505050565b60008060086000848152602001908152602001600020905060008160030160009054906101000a90046001600160a01b03169050600060088861ffff16901c905060008860ff169050826001600160a01b0316600b54846001600160a01b0316630140356d905060e01b8c8b8b8b88886040516020018087815260200180602001806020018681526020018560ff1660ff1681526020018460ff1660ff168152602001838103835288818151815260200191508051906020019080838360005b8381101561202d578181015183820152602001612015565b50505050905090810190601f16801561205a5780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b8381101561208d578181015183820152602001612075565b50505050905090810190601f1680156120ba5780820380516001836020036101000a031916815260200191505b509850505050505050505060405160208183030381529060405260405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106121205780518252601f199092019160209182019101612101565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106121845780518252601f199092019160209182019101612165565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d80600081146121e7576040519150601f19603f3d011682016040523d82523d6000602084013e6121ec565b606091505b50506040518791508b907f97b6ce150a3b8e94c442fb09fe13c2b262f0e9b3bfc83ef2309675e09dcb453b90600090a35060019998505050505050505050565b6000806122388561123c565b9050600061224d61224886611948565b61123c565b9050600061225d61224886611948565b905082821015801561226f5750828110155b6122aa5760405162461bcd60e51b81526004018080602001828103825260308152602001806134296030913960400191505060405180910390fd5b60006122d26107e085066122c6866107e063ffffffff6123dd16565b9063ffffffff612d0f16565b90508083108183108115826122e45750805b156122ff576122f289611948565b9650505050505050611070565b81801561230a575080155b15612318576122f288611948565b8180156123225750805b15612346578385101561233d5761233888611948565b6122f2565b6122f289611948565b6123646123528961266b565b6107e0865b069063ffffffff612d6c16565b6123796123708b61266b565b6107e088612357565b101561233d576122f288611948565b600082815b838110156123d157858214156123a857600192505050611070565b60009182526003602052604090912054906123ca81600163ffffffff6123dd16565b905061238d565b50600095945050505050565b81810182811015610a36576040805162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b600080606060008061244687611948565b905060006124538261123c565b9050605087518161246057fe5b061561249d5760405162461bcd60e51b815260040180806020018281038252602b8152602001806133a1602b913960400191505060405180910390fd5b60005b60508851816124ab57fe5b04811015612629576124d66124c782605063ffffffff612d6c16565b8990605063ffffffff612bd616565b94506124eb826001830163ffffffff6123dd16565b95506124f685611948565b6000818152600360205260409020549094506125c35761251585612ddc565b6125456125408660405160200180828152602001915050604051602081830303815290604052612e35565b612ec2565b1115612598576040805162461bcd60e51b815260206004820152601b60248201527f48656164657220776f726b20697320696e73756666696369656e740000000000604482015290519081900360640190fd5b6000848152600360205260409020839055600486066125c35760008481526004602052604090208690555b6125d3858463ffffffff612eff16565b61260e5760405162461bcd60e51b815260040180806020018281038252602681526020018061337b6026913960400191505060405180910390fd5b83925061262281600163ffffffff6123dd16565b90506124a0565b508261263489611948565b6040517ff90e4f1d9cd0dd55e339411cbc9b152482307c3a23ed64715e4a2858f641a3f590600090a3506001979650505050505050565b6000610a3661267983612ddc565b612f2b565b6060612693826009600163ffffffff612bd616565b60008151811061269f57fe5b016020015160f81c61272f57600060026126b884612bc1565b6000815181106126c457fe5b016020015160f81c0360ff169050806126e684600a600163ffffffff612bd616565b6000815181106126f257fe5b016020015160f81c14612715575050604080516020810190915260008152610b55565b61272783600b8363ffffffff612bd616565b915050610b55565b6000612744836008600363ffffffff612f4216565b60408051621976a960e81b815290519081900360030190209091508114156127fe5761277983600b600163ffffffff612bd616565b60008151811061278557fe5b60209101015160f81c60141415806127d05750604051808061222b60f21b815250600201905060405180910390206127cd6002855103600286612f429092919063ffffffff16565b14155b156127eb575050604080516020810190915260008152610b55565b61272783600c601463ffffffff612bd616565b604080516205ea4560ea1b8152905190819003600301902081141561287b57825161283690849060001901600163ffffffff612bd616565b60008151811061284257fe5b60209101015160f81c608714612868575050604080516020810190915260008152610b55565b61272783600b601463ffffffff612bd616565b5050604080516020810190915260008152919050565b60408051603560f91b81529051600191819003820190206060916128b9908490600990612f42565b146128d35750604080516020810190915260008152610b55565b60606128e883600a600163ffffffff612bd616565b9050611070600b6128f883612ec2565b85919063ffffffff612bd616565b8051600090829061291b575060009050610b55565b50506020015190565b6060610a36826024602063ffffffff612bd616565b60008385148015612948575081155b801561295357508251155b1561296057506001610a1f565b60608584866040516020018084815260200183805190602001908083835b6020831061299d5780518252601f19909201916020918201910161297e565b51815160209384036101000a6000190180199092169116179052920193845250604080518085038152939091019052509250611056915082905084612f9c565b60006129e88261123c565b6129f360015461123c565b0392915050565b6000600181612a1084828463ffffffff612bd616565b600081518110612a1c57fe5b016020015160f81c905060fd81101580612a37575060ff8116155b15612a4757600092505050610b55565b60005b8160ff168160ff161015612a9857612a78612a73848588510388612bd69092919063ffffffff16565b6130db565b8551930192831115612a905760009350505050610b55565b600101612a4a565b50508251149050919050565b6000600181612aba84828463ffffffff612bd616565b600081518110612ac657fe5b016020015160f81c905060fd81101580612ae1575060ff8116155b15612af157600092505050610b55565b60005b8160ff168160ff161015612a9857612b22612b1d848588510388612bd69092919063ffffffff16565b6130fe565b8551930192831115612b3a5760009350505050610b55565b600101612af4565b60606000816001825b8560ff168160ff161015612b8a57612b71828389510389612bd69092919063ffffffff16565b9250612b7c836130fe565b935090830190600101612b4b565b50612ba3818288510388612bd69092919063ffffffff16565b9150612bae826130fe565b925061105686828563ffffffff612bd616565b6060610a36826008600163ffffffff612bd616565b606081830184511015612c26576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b604051905081604082010160405281815282840181038360208601018381015b80821015612c5f57815183830152602082019150612c46565b5050509392505050565b60006060612c768361318b565b90506060612c8382612e35565b9050610a1f81612ec2565b60606000816001825b8560ff168160ff161015612cd657612cbd828389510389612bd69092919063ffffffff16565b9250612cc8836130db565b935090830190600101612c97565b50612cef818288510388612bd69092919063ffffffff16565b9150612bae826130db565b6060610a36826000602463ffffffff612bd616565b600082821115612d66576040805162461bcd60e51b815260206004820152601d60248201527f556e646572666c6f7720647572696e67207375627472616374696f6e2e000000604482015290519081900360640190fd5b50900390565b600082612d7b57506000610a36565b5081810281838281612d8957fe5b0414610a36576040805162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720647572696e67206d756c7469706c69636174696f6e2e00604482015290519081900360640190fd5b60006060612df3836048600363ffffffff612bd616565b9050600083604b81518110612e0457fe5b016020015160f81c90506000612e1c61254084612e35565b6002199290920160ff166101000a909102949350505050565b60608082516040519080825280601f01601f191660200182016040528015612e64576020820181803883390190505b50905060005b8351811015612ebb57838181518110612e7f57fe5b602001015160f81c60f81b826001838751030381518110612e9c57fe5b60200101906001600160f81b031916908160001a905350600101612e6a565b5092915050565b600080805b8351811015612ebb578060010184510360080260020a848281518110612ee957fe5b016020015160f81c029190910190600101612ec7565b600080612f0e611aa8856131a0565b9050828114612f21576000915050610a36565b5060019392505050565b6000610a3661ffff60d01b8363ffffffff6131b516565b600081830184511015612f92576040805162461bcd60e51b8152602060048201526013602482015272536c696365206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b5091016020012090565b60006020835181612fa957fe5b0615612fb757506000610a36565b825160201415612fc957506001610a36565b825160401415612fdb57506000610a36565b82518290600090612ffd90611aa8908790601f1901602063ffffffff612bd616565b90506000613016611aa88783602063ffffffff612bd616565b905060015b865160019061303190602063ffffffff6131b516565b038110156130d15760028406600114156130895761308261305d8860208085029063ffffffff612bd616565b83604051602001808281526020019150506040516020818303038152906040526131c8565b91506130c5565b6040805160208082018590528251808303820181529183019092526130c2916130bd908a908581029063ffffffff612bd616565b6131c8565b91505b600193841c930161301b565b5014949350505050565b60008060006130e984613283565b60259190910160ff1601600401949350505050565b600080613114836008600163ffffffff612bd616565b60008151811061312057fe5b016020015160f81c905060fd811061317f576040805162461bcd60e51b815260206004820181905260248201527f4d756c74692d6279746520566172496e7473206e6f7420737570706f72746564604482015290519081900360640190fd5b60090160ff1692915050565b6060610a36826000600863ffffffff612bd616565b6060610a36826004602063ffffffff612bd616565b60008183816131c057fe5b049392505050565b6000610a3383836040516020018083805190602001908083835b602083106132015780518252601f1990920191602091820191016131e2565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132495780518252601f19909201916020918201910161322a565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052611948565b600080606061329b846024600163ffffffff612bd616565b905060006132a8826132fe565b9050600060ff82166132d057826000815181106132c157fe5b016020015160f81c90506132f3565b6132f06125406132eb88602560ff871663ffffffff612bd616565b612e35565b90505b909350915050915091565b60008160008151811061330d57fe5b60209101015160f81c60ff141561332657506008610b55565b8160008151811061333357fe5b60209101015160f81c60fe141561334c57506004610b55565b8160008151811061335957fe5b60209101015160f81c60fd141561337257506002610b55565b50600091905056fe4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e486561646572206172726179206c656e677468206d75737420626520646976697369626c6520627920383043616e206f6e6c792062652063616e63656c6c6564206279206f776e6572206f7220636f6e73756d65724e65772062657374206861736820646f6573206e6f742068617665206d6f726520776f726b207468616e2070726576696f7573412064657363656e64616e74206865696768742069732062656c6f772074686520616e636573746f7220686569676874416e636573746f72206d75737420626520686561766965737420636f6d6d6f6e20616e636573746f72a265627a7a723058204b8e31a8aea3099c7d920fd5cb561eef5ba7e26ecba3d0ff610bddc5d56ffec164736f6c634300050a0032",
  "sourceMap": "143:3409:4:-;;;1256:6:2;1220:42;;187:252:4;8:9:-1;5:2;;;30:1;27;20:12;5:2;187:252:4;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;187:252:4;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;-1:-1;;187:252:4;;;;;;;;;;;;;3101:21:3;;187:252:4;;-1:-1:-1;187:252:4;;-1:-1:-1;187:252:4;;;;;;;;;;;;;;;3126:2:3;3101:27;3093:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3158:22;3183:24;:14;:22;;;;;:24;;:::i;:::-;3158:49;-1:-1:-1;3262:66:3;3239:90;;:104;3218:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3432:12;:29;;;3471:15;:32;;;3513:23;:40;;;3563:27;;;:11;:27;;;;;:37;;;3638:27;3660:4;3593:7;3650:14;3638:7;:11;;;;;;:27;;;;:::i;:::-;3610:11;:25;3622:12;3610:25;;;;;;;;;;;:55;;;;3695:34;:14;:32;;;;;:34;;:::i;:::-;3676:16;:53;-1:-1:-1;;;1896:6:2;:17;;;;-1:-1:-1;;;;187:252:4;;;;143:3409;;4750:156:5;4807:7;4833:66;4850:36;4874:10;4881:2;4874: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;;4874:10:5;;;;;;;-1:-1:-1;263:2;;-1:-1;;4874:10:5;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4874:10:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4874:10:5;4857:28;;;4874:10;4857:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;4857:28:5;;;;;;;4850:36;;4857:28;;;;4850:36;;;;;4857:28;4850: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;;4850:36:5;;;;;;;-1:-1:-1;263:2;;-1:-1;;4850:36:5;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4850:36:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4850:36:5;4833:54;;;4850:36;4833:54;;;;;;;;;26:21:-1;;;22:32;;6:49;;4833:54:5;;;;;;;:64;;;;;:66;;:::i;:::-;4826:73;;4750:156;;;;:::o;2288:160:7:-;2348:7;2381:2;2375;:8;;2367:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:7;;;2288:160::o;23489:148:5:-;23561:7;23587:43;23607:22;23621:7;-1:-1:-1;;;;;23607:13:5;:22;:::i;:::-;-1:-1:-1;;;;;23587:19:5;:43;:::i;15955:303:6:-;16108:26;;16019:14;;16086:7;;16104:72;;-1:-1:-1;16162:3:6;;-1:-1:-1;16155:10:6;;16104:72;-1:-1:-1;;16238:2:6;16225:16;16219:23;;16195:57::o;20858:316:5:-;20926:7;20945:15;20963:20;20977:2;20981:1;20963:7;:13;;;;;;:20;;;;;:::i;:::-;20945:38;;20993:8;21010:7;21018:2;21010:11;;;;;;;;;;;;;;;-1:-1:-1;21032:17:5;21052:34;21064:21;21082:2;-1:-1:-1;;;;;21064:17:5;:21;:::i;:::-;-1:-1:-1;;;;;21052:11:5;:34;:::i;:::-;-1:-1:-1;;21113:6:5;;;;21096:23;;21150:3;:16;21137:30;;;;20858:316;-1:-1:-1;;;;20858:316:5:o;21554:178::-;21623:7;21700:25;21717:7;379:58;21700:16;;;;;;:25;;;;:::i;10345:819:6:-;10432:16;10495:7;10486:6;:16;10468:6;:13;:35;;10460:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10664:4;10658:11;10651:18;;10713:7;10708:2;10703:3;10699:12;10695:26;10689:4;10682:40;10747:7;10742:3;10735:20;10874:6;10866;10862:19;10857:3;10853:29;10950:6;10945:2;10937:6;10933:15;10929:28;10994:7;10989:3;10985:17;10896:252;11025:3;11020;11017:12;10896:252;;;11129:3;11123:10;11116:4;11111:3;11107:14;11100:34;11064:2;11059:3;11055:12;11048:19;;10896:252;;;10900:116;;10547:611;;;;;;:::o;1595:278:5:-;1662:12;1686:22;1721:2;:9;1711:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;1711:20:5;87:34:-1;135:17;;-1:-1;1711:20:5;-1:-1:-1;1686:45:5;-1:-1:-1;1747:6:5;1742:98;1763:2;:9;1759:1;:13;1742:98;;;1824:2;1827:1;1824:5;;;;;;;;;;;;;;;;1793:9;1819:1;1815;1803:2;:9;:13;:17;1793:28;;;;;;;;;;;:36;-1:-1:-1;;;;;1793:36:5;;;;;;;;-1:-1:-1;1774:3:5;;1742:98;;;-1:-1:-1;1857:9:5;1595:278;-1:-1:-1;;1595:278:5:o;3429:268::-;3490:7;;;3535:131;3556:2;:9;3552:1;:13;3535:131;;;3646:1;3650;3646:5;3633:2;:9;:19;3628:1;:25;3622:1;:32;3612:2;3615:1;3612:5;;;;;;;;;;;;;;3606:49;3596:59;;;;;3567:3;;3535:131;;1865:301:7;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:7:o;143:3409:4:-;;;;;;;",
  "deployedSourceMap": "143:3409:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21954:107:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21954:107:3;;;:::i;:::-;;;;;;;;;;;;;;;;22778:99;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22778:99:3;;;:::i;1155:21:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1155:21:2;;;:::i;1182:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1182:32:2;;;:::i;22241:101:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22241:101:3;;;:::i;18722:242::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18722:242:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;18722:242:3;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12362:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12362:143:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12362:143:3;;;;;;;:::i;2246:431:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2246:431:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2246:431:2;;:::i;11398:113:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11398:113:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11398:113:3;;:::i;6901:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6901:154:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6901:154:3;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6901:154:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6901:154:3;;;;;;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;6901:154:3;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;6901:154:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6901:154:3;;;;;;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;-1:-1;6901:154:3;;-1:-1:-1;6901:154:3;-1:-1:-1;6901:154:3;:::i;2272:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2272:42:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16407:259;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16407:259:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;16407:259:3;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16407:259:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16407:259:3;;;;;;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;16407:259:3;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16407:259:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16407:259:3;;;;;;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;16407:259:3;;-1:-1:-1;16407:259:3;-1:-1:-1;16407:259:3;;:::i;7611:286::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7611:286:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7611:286:3;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7611:286:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7611:286:3;;;;;;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;7611:286:3;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7611:286:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7611:286:3;;;;;;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;7611:286:3;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;7611:286:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7611:286:3;;;;;;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;-1:-1;7611:286:3;;-1:-1:-1;7611:286:3;-1:-1:-1;7611:286:3;:::i;4402:313:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4402:313:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4402:313:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4402:313:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4402:313:2;;;;;;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;4402:313:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;4402:313:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4402:313:2;;;;;;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;4402:313:2;;-1:-1:-1;4402:313:2;-1:-1:-1;4402:313:2;;;;;-1:-1:-1;;;;;4402:313:2;;;;;;;;;;;;;;;;;:::i;1090:48::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1090:48:2;;;:::i;1220:42::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1220:42:2;;;:::i;2683:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2683:105:2;;;:::i;8331:973::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8331:973:2;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8331:973:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8331:973:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8331:973:2;;;;;;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;8331:973:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8331:973:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8331:973:2;;;;;;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;8331:973:2;;;;-1:-1:-1;;;;;;8331:973:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8331:973:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8331:973:2;;;;;;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;8331:973:2;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;8331:973:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8331:973:2;;;;;;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;8331:973:2;;-1:-1:-1;8331:973:2;-1:-1:-1;8331:973:2;;:::i;21538:227:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21538:227:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21538:227:3;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;21538:227:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21538:227:3;;;;;;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;21538:227:3;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;21538:227:3;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21538:227:3;;;;;;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;-1:-1;21538:227:3;;-1:-1:-1;21538:227:3;-1:-1:-1;21538:227:3;:::i;13853:172::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13853:172:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13853:172:3;;;;;;;;;;;;:::i;23071:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23071:115:3;;;:::i;3040:600:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3040:600:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3040:600:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3040:600:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22509:93:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22509:93:3;;;:::i;21954:107::-;22038:16;;21954:107;:::o;22778:99::-;22855:15;;22778:99;:::o;1155:21:2:-;;;;:::o;1182:32::-;;;;:::o;22241:101:3:-;22322:13;;22241:101;:::o;18722:242::-;18879:4;18902:55;18924:9;18935:5;18942:6;18950;18902:21;:55::i;:::-;18895:62;;18722:242;;;;;;;:::o;12362:143::-;12441:7;12467:31;12481:7;12490;12467:13;:31::i;:::-;12460:38;;12362:143;;;;;:::o;2246:431:2:-;2307:4;2351:20;;;:8;:20;;;;;2403;2389:10;;;;-1:-1:-1;;;2389:10:2;;;;:34;;;;;;;;;2381:65;;;;;-1:-1:-1;;;2381:65:2;;;;;;;;;;;;-1:-1:-1;;;2381:65:2;;;;;;;;;;;;;;;2478:13;;;;-1:-1:-1;;;;;2478:13:2;2464:10;:27;;:55;;-1:-1:-1;2509:10:2;;;;-1:-1:-1;;;;;2509:10:2;2495;:24;2464:55;2456:110;;;;-1:-1:-1;;;2456:110:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2576:10;;;:33;;-1:-1:-1;;;;2576:33:2;-1:-1:-1;;;2576:33:2;;;2624:25;;2638:10;;2624:25;;-1:-1:-1;;2624:25:2;2666:4;2659:11;;;2246:431;;;;:::o;11398:113:3:-;11458:7;11484:20;11496:7;11484:11;:20::i;6901:154::-;6988:4;7011:37;7023:7;;7011:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;7011:37:3;;;;137:4:-1;7011:37:3;;;;;;;;;;;;;;;;;;-1:-1:-1;7032:8:3;;-1:-1:-1;7032:8:3;;;;7011:37;;7032:8;;;;7011:37;1:33:-1;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;7011:11:3;;-1:-1:-1;;7011:37:3:i;2272:42::-;2313:1;2272:42;:::o;16407:259::-;16577:4;16600:59;16617:9;16628:12;;16600:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;16600:59:3;;;;137:4:-1;16600:59:3;;;;;;;;;;;;;;;;;;-1:-1:-1;16642:8:3;;-1:-1:-1;16642:8:3;;;;16600:59;;16642:8;;;;16600:59;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;16652:6:3;;-1:-1:-1;16600:16:3;;-1:-1:-1;;16600:59:3:i;:::-;16593:66;16407:259;-1:-1:-1;;;;;;;16407:259:3:o;7611:286::-;7790:4;7813:77;7837:21;;7813:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;7813:77:3;;;;137:4:-1;7813:77:3;;;;;;;;;;;;;;;;;;-1:-1:-1;7860:19:3;;-1:-1:-1;7860:19:3;;;;7813:77;;7860:19;;;;7813:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;;7813:77:3;;;;137:4:-1;7813:77:3;;;;;;;;;;;;;;;;;;-1:-1:-1;7881:8:3;;-1:-1:-1;7881:8:3;;;;7813:77;;7881:8;;;;7813:77;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;7813:23:3;;-1:-1:-1;;;7813:77:3:i;4402:313:2:-;4612:7;4638:70;4647:7;;4638:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;4638:70:2;;;;137:4:-1;4638:70:2;;;;;;;;;;;;;;;;;;-1:-1:-1;4656:5:2;;-1:-1:-1;4656:5:2;;;;4638:70;;4656:5;;;;4638:70;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;4663:10:2;;-1:-1:-1;4675:9:2;;-1:-1:-1;4686:9:2;;-1:-1:-1;4697:10:2;4638:8;:70::i;:::-;4631:77;4402:313;-1:-1:-1;;;;;;;;;4402:313:2:o;1090:48::-;1126:12;1090:48;:::o;1220:42::-;;;;:::o;2683:105::-;2764:17;;2683:105;:::o;8331:973::-;8630:4;8646:13;8662:60;8679:8;8689:4;;8695:5;;8702:9;8662:50;;;;;;-1:-1:-1;;;;;8662:50:2;;-1:-1:-1;;;;;8662:50:2;;;;;;;;30:3:-1;22:6;14;1:33;45:16;;;;;-1:-1;8662:50:2;;;;45:16:-1;1:33;-1:-1;;;;;;8662:50:2;;;45:16:-1;;;;8662:50:2;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;8662:50:2;;;;;;;-1:-1:-1;8662:58:2;;-1:-1:-1;;;;;;8662:60:2:i;:::-;8880:20;;;;:13;:20;;;;;;8646:76;;-1:-1:-1;8880:20:2;;8875:272;;8916:140;8949:7;;8916:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8916:140:2;;;;;;8974:6;;8916:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;8998:6:2;;-1:-1:-1;9022:5:2;;-1:-1:-1;9045:10:2;;-1:-1:-1;8916:15:2;:140::i;:::-;-1:-1:-1;9070:20:2;;;;:13;:20;;;;;:27;;-1:-1:-1;;9070:27:2;9093:4;9070:27;;;9111:17;:25;;;8875:272;9156:52;9171:11;9184:4;;9156:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9156:52:2;;;;137:4:-1;9156:52:2;;;;;;;;;;;;;;;;;;-1:-1:-1;9190:5:2;;-1:-1:-1;9190:5:2;;;;9156:52;;9190:5;;;;9156:52;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9197:10:2;;-1:-1:-1;9156:14:2;;-1:-1:-1;;9156:52:2:i;:::-;;9218:58;9232:5;9239:11;9252:4;;9218:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;9218:58:2;;;;137:4:-1;9218:58:2;;;;;;;;;;;;;;;;;;-1:-1:-1;9258:5:2;;-1:-1:-1;9258:5:2;;;;9218:58;;9258:5;;;;9218:58;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;9265:10:2;;-1:-1:-1;9218:13:2;;-1:-1:-1;;9218:58:2:i;:::-;-1:-1:-1;9293:4:2;;8331:973;-1:-1:-1;;;;;;;;;;;;;;;8331:973:2:o;21538:227:3:-;21685:7;21711:47;21733:9;21744:5;;21711:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;21711:47:3;;;;137:4:-1;21711:47:3;;;;;;;;;;;;;;;;;;-1:-1:-1;21751:6:3;;-1:-1:-1;21751:6:3;;;;21711:47;;21751:6;;;;21711:47;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;21711:21:3;;-1:-1:-1;;;21711:47:3:i;:::-;21704:54;21538:227;-1:-1:-1;;;;;;21538:227:3:o;13853:172::-;13952:4;13975:43;13987:9;13998:11;14011:6;13975:11;:43::i;:::-;13968:50;;13853:172;;;;;;:::o;23071:115::-;23156:23;;23071:115;:::o;3040:600:2:-;3126:14;3354:20;;;:8;:20;;;;;3393:11;;3421:9;;;;3452:14;;;;3490:10;;;;3393:11;;3421:9;;3452:14;-1:-1:-1;;;3452:14:2;;;;;;3126;;;;;;;;3490:10;;;;3484:17;;;;;;;;3522:13;;;;3553:10;;;;3619:14;;;;;3040:600;;;;-1:-1:-1;3040:600:2;;3476:25;;-1:-1:-1;;;;;3522:13:2;;;;3553:10;;;-1:-1:-1;;;;3584:13:2;;;;;;-1:-1:-1;3619:14:2;-1:-1:-1;3040:600:2;-1:-1:-1;;3040:600:2:o;22509:93:3:-;22557:7;22583:12;22509:93;:::o;17153:1082::-;17311:4;17375:5;17362:9;:18;:41;;;;;17397:6;17384:9;:19;17362:41;17358:83;;;-1:-1:-1;17426:4:3;17419:11;;17358:83;17474:5;17513:6;17474:5;17513:6;17451:20;17602:413;17625:6;17621:1;:10;17602:413;;;17678:9;17665;:22;17661:163;;17771:24;;;;:13;:24;;;;;;17722:9;;-1:-1:-1;17661:163:3;17855:9;17841:10;:23;17837:168;;17951:25;;;;:13;:25;;;;;;17900:10;;-1:-1:-1;17837:168:3;17637:8;:1;17643;17637:8;:5;:8;:::i;:::-;17633:12;;17602:413;;;;18044:13;18028:12;:29;18024:50;;;18067:5;18060:12;;;;;;;;18024:50;18149:10;18136:9;:23;18132:44;;18169:5;18162:12;;;;;;;;18132:44;-1:-1:-1;18224:4:3;;17153:1082;-1:-1:-1;;;;;;;;17153:1082:3:o;11770:333::-;11850:7;11888;11850;11905:106;11929:7;11925:1;:11;11905:106;;;11977:23;;;;:13;:23;;;;;;;;11942:8;:1;11948;11942:8;:5;:8;:::i;:::-;11938:12;;11905:106;;;-1:-1:-1;12028:22:3;12020:51;;;;;-1:-1:-1;;;12020:51:3;;;;;;;;;;;;-1:-1:-1;;;12020:51:3;;;;;;;;;;;;;;10683:457;10744:7;;10811;10744;10828:273;10852:19;10848:23;;10828:273;;;10911:21;;;;:11;:21;;;;;;;-1:-1:-1;10950:12:3;10946:145;;10993:23;;;;:13;:23;;;;;;;;10946:145;;;11062:14;:7;11074:1;11062:14;:11;:14;:::i;:::-;11055:21;;;;;;;10946:145;10877:8;:1;10883;10877:8;:5;:8;:::i;:::-;10873:12;;10828:273;;;-1:-1:-1;11110:23:3;;;-1:-1:-1;;;11110:23:3;;;;;;;;;;;;-1:-1:-1;;;11110:23:3;;;;;;;;;;;;;;701:150:4;791:4;814:30;826:7;835:8;814:11;:30::i;14618:1196:3:-;14785:4;14801:22;14826:18;:8;:16;:18::i;:::-;14801:43;;14854:26;14883:22;:12;:20;:22::i;:::-;14854:51;;14945:15;;14923:18;:37;14915:82;;;;;-1:-1:-1;;;14915:82:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:1;15028:29;;;:13;:29;;;;;;15007:100;;;;;-1:-1:-1;;;15007:100:3;;;;;;;;;;;;-1:-1:-1;;;15007:100:3;;;;;;;;;;;;;;;15138:73;15160:9;15171:15;;15188:14;15204:6;15138:21;:73::i;:::-;15117:152;;;;-1:-1:-1;;;15117:152:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15360:14;15300:56;15322:9;15333:12;15347:8;15300:21;:56::i;:::-;:74;15279:163;;;;-1:-1:-1;;;15279:163:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15453:15;:32;;;15495:23;:35;;;-1:-1:-1;15560:28:3;:8;:26;:28::i;:::-;15541:47;;15614:16;;15602:8;:28;15598:84;;15644:16;:27;;;15598:84;15776:9;15748:14;15716:18;15697:89;;;;;;;;;;-1:-1:-1;15803:4:3;;14618:1196;-1:-1:-1;;;;;;;14618:1196:3:o;445:250:4:-;623:4;646:42;658:19;679:8;646:11;:42::i;5476:1914:2:-;5723:6;;;5757:1;5748:10;;5739:19;;;5790:14;;5683:7;;5723:6;5836:2;5822:16;;;:35;;-1:-1:-1;5842:15:2;;5822:35;5814:64;;;;;-1:-1:-1;;;5814:64:2;;;;;;;;;;;;-1:-1:-1;;;5814:64:2;;;;;;;;;;;;;;;5991:12;;6075;;;;;:47;;;6121:1;6110:8;:12;6097:5;6103:1;6097:8;;;;;;;;;;;;;;6091:31;;6075:47;6071:200;;;6169:8;6180:5;6146:40;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;6146:40:2;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6146:40:2;;;6138:48;;6212:1;6200:13;;;;6071:200;6299:34;;6323:1;6299:34;;;;;;;;;6281:15;;6327:5;;6299:34;;;;;;;;;;;;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;;;6299:34:2;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6299:34:2;;;6281:52;;6364:8;6376:1;6364:13;:74;;;;6437:1;6411:16;:2;:14;:16::i;:::-;:23;:27;6364:74;:147;;;;6510:1;6476:24;:2;:22;:24::i;:::-;:31;:35;6364:147;6343:231;;;;;-1:-1:-1;;;6343:231:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;6606:1;6593:10;:14;:30;;;;6622:1;6611:8;:12;6593:30;6585:63;;;;;-1:-1:-1;;;6585:63:2;;;;;;;;;;;;-1:-1:-1;;;6585:63:2;;;;;;;;;;;;;;;6659:25;6687:20;;;:8;:20;;;;;6717:10;;;:23;;-1:-1:-1;;;;;;6717:23:2;6730:10;6717:23;;;6755:14;;6751:77;;6799:18;;;;;;6785:32;;6751:77;6841:12;;6837:71;;6881:16;;;;;;6869:9;;;:28;6837:71;6921:14;;;;6917:72;;6951:14;;;:27;;-1:-1:-1;;;;6951:27:2;-1:-1:-1;;;6951:27:2;;;;;;;6917:72;7014:1;7002:9;:13;;;:32;;;;;7031:3;7019:9;:15;;;7002:32;6998:116;;;7078:13;;;:25;;-1:-1:-1;;;;7078:25:2;-1:-1:-1;;;7078:25:2;;;;;;;6998:116;7127:14;;7123:72;;7157:14;;;:27;;;7123:72;7204:13;;;:25;;-1:-1:-1;;;;;;7204:25:2;-1:-1:-1;;;;;7204:25:2;;;;;7239:10;;;:33;;-1:-1:-1;;7239:10:2;-1:-1:-1;;;;7239:33:2;-1:-1:-1;;;;7239:33:2;;;;;7316:10;7304;-1:-1:-1;;;;;7288:67:2;;7328:10;7340:7;7349:5;7288:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7288:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7288:67:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7288:67:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7373:10:2;;5476:1914;-1:-1:-1;;;;;;;;;;5476:1914:2:o;4750:156:5:-;4807:7;4833:66;4850:36;4874:10;4881:2;4874: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;;4874:10:5;;;;;;;-1:-1:-1;263:2;;-1:-1;;4874:10:5;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4874:10:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4874:10:5;4857:28;;;4874:10;4857:28;;;;;;;;;26:21:-1;;;22:32;;6:49;;4857:28:5;;;;;;;4850:36;;4857:28;;;;4850:36;;;;;4857:28;4850: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;;4850:36:5;;;;;;;-1:-1:-1;263:2;;-1:-1;;4850:36:5;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4850:36:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4850:36:5;4833:54;;;4850:36;4833:54;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4833:54:5;;;;:64;:66::i;11204:867:2:-;11392:4;11429:148;11464:5;11487:41;:29;:7;:27;:29::i;:::-;:39;:41::i;:::-;11546:6;11570;11429:17;:148::i;:::-;11408:205;;;;;-1:-1:-1;;;11408:205:2;;;;;;;;;;;;-1:-1:-1;;;11408:205:2;;;;;;;;;;;;;;;11624:19;11646:17;:7;:15;:17::i;:::-;11624:39;;11673:12;11688:28;:26;:28::i;:::-;11673:43;;11748:84;11777:11;11806:4;11828:3;11748:11;:84::i;:::-;11727:149;;;;;-1:-1:-1;;;11727:149:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11886:15;11904:20;;;:8;:20;;;;;:29;;;-1:-1:-1;;;11904:29:2;;;;;11964:22;11974:11;11964:9;:22::i;:::-;:35;;;;11943:99;;;;;-1:-1:-1;;;11943:99:2;;;;;;;;;;;;;;;;;;;;;;;;;;;12943:1616;13108:4;13132:18;:4;:16;:18::i;:::-;13124:50;;;;;-1:-1:-1;;;13124:50:2;;;;;;;;;;;;-1:-1:-1;;;13124:50:2;;;;;;;;;;;;;;;13192:20;:5;:18;:20::i;:::-;13184:53;;;;;-1:-1:-1;;;13184:53:2;;;;;;;;;;;;-1:-1:-1;;;13184:53:2;;;;;;;;;;;;;;;13248:17;13386:20;;;13289:1;13386:20;;;;;;;;13424:14;;;;13274:16;;;;;;;;13328:18;;;13386:20;13442:15;-1:-1:-1;13424:33:2;13416:76;;;;;-1:-1:-1;;;13416:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;13524:20;13510:10;;;;-1:-1:-1;;;13510:10:2;;;;:34;;;;;;;;;13502:68;;;;;-1:-1:-1;;;13502:68:2;;;;;;;;;;;;-1:-1:-1;;;13502:68:2;;;;;;;;;;;;;;;13597:9;;;;13632:19;;;;;13661:506;;13689:17;13709:47;:5;13742:12;13709:47;:26;:47;:::i;:::-;13689:67;;13770:10;13789:29;:4;:27;:29::i;:::-;13819:1;13789:32;;;;;;;;;;;;;;;-1:-1:-1;13899:5:2;13871:23;:4;13882:1;13892;13885:8;;13783:39;13871:23;;:10;:23;:::i;:::-;13861:34;;;;;;:43;13836:116;;;;;-1:-1:-1;;;13836:116:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;13986:14;;;;-1:-1:-1;;;13986:14:2;;;;14039:15;;;:68;;;14097:10;14074:33;;:19;:4;:17;:19::i;:::-;:33;;;;14039:68;14014:142;;;;;-1:-1:-1;;;14014:142:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;13661:506;;;;14195:11;;14234:21;;;;;14265:267;;14295:16;14314:44;:4;14345:11;14314:44;:24;:44;:::i;:::-;14295:63;;14398:10;14397:11;:74;;;;14464:7;14438:21;:3;:19;:21::i;:::-;14428:32;;;;;;:43;14397:74;14372:149;;;;;-1:-1:-1;;;14372:149:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;14265:267;;-1:-1:-1;14548:4:2;;12943:1616;-1:-1:-1;;;;;;;;;;;12943:1616:2:o;9735:892::-;9916:4;9932:25;9960:8;:20;9969:10;9960:20;;;;;;;;;;;9932:48;;9990:14;10020:4;:13;;;;;;;;;;-1:-1:-1;;;;;10020:13:2;9990:44;;10045:17;10086:1;10071:11;:16;;;;10045:43;;10098:18;10125:11;10139:4;10125:18;10098:46;;10346:1;-1:-1:-1;;;;;10338:15:2;10358:18;;10425:1;-1:-1:-1;;;;;10425:5:2;;:14;;;;10468:5;10475:4;10481:5;10488:10;10500:11;10513:12;10457:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10457:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10457:69:2;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10457:69:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10457:69:2;;;10391:149;;;;;;-1:-1:-1;;;;;10391:149:2;;-1:-1:-1;;;;;10391:149:2;;;;;;;;;;;;;;;;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;;;10391:149:2;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;10391:149:2;;;10338:212;;;;;;;;;;;;;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;;;10338:212:2;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;;10566:32:2;;10587:10;;-1:-1:-1;10580:5:2;;10566:32;;;;;-1:-1:-1;10616:4:2;;9735:892;-1:-1:-1;;;;;;;;;9735:892:2:o;19367:1768:3:-;19511:7;19530:23;19556:22;19568:9;19556:11;:22::i;:::-;19530:48;;19588:19;19610:28;19622:15;:5;:13;:15::i;:::-;19610:11;:28::i;:::-;19588:50;;19648:20;19671:29;19683:16;:6;:14;:16::i;19671:29::-;19648:52;;19747:15;19732:11;:30;;:65;;;;;19782:15;19766:12;:31;;19732:65;19711:151;;;;-1:-1:-1;;;19711:151:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19970:30;20003:53;20051:4;20033:15;:22;20003:25;:15;20023:4;20003:25;:19;:25;:::i;:::-;:29;:53;:29;:53;:::i;:::-;19970:86;-1:-1:-1;20087:36:3;;;20155:37;;;20532:14;;20087:36;20532:32;;;20550:14;20532:32;20528:63;;;20574:15;:5;:13;:15::i;:::-;20567:22;;;;;;;;;;20528:63;20604:13;:32;;;;;20622:14;20621:15;20604:32;20600:64;;;20646:16;:6;:14;:16::i;20600:64::-;20677:13;:31;;;;;20694:14;20677:31;20673:456;;;20746:12;20731:11;:27;;:64;;20779:16;:6;:14;:16::i;:::-;20731:64;;;20761:15;:5;:13;:15::i;20673:456::-;20947:53;20973:26;:6;:24;:26::i;:::-;20963:4;20948:12;:19;;;20947:53;:25;:53;:::i;:::-;20876:51;20901:25;:5;:23;:25::i;:::-;20891:4;20877:11;:18;;20876:51;20875:125;20871:248;;;21027:16;:6;:14;:16::i;12960:438::-;13060:4;13095:11;13060:4;13181:189;13205:6;13201:1;:10;13181:189;;;13257:9;13245:8;:21;13241:71;;;13293:4;13286:11;;;;;;13241:71;13336:23;;;;:13;:23;;;;;;;;13217:8;:1;13223;13217:8;:5;:8;:::i;:::-;13213:12;;13181:189;;;-1:-1:-1;13386:5:3;;12960:438;-1:-1:-1;;;;;12960:438:3:o;2520:172:7:-;2605:7;;;2630;;;;2622:45;;;;;-1:-1:-1;;;2622:45:7;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:2300:4;1334:4;1350:15;1375:20;1405:22;1437:23;1463:17;:7;:15;:17::i;:::-;1437:43;;1562:21;1586:28;1598:15;1586:11;:28::i;:::-;1562:52;;1817:2;1799:8;:15;:20;;;;;;:25;1791:81;;;;-1:-1:-1;;;1791:81:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:9;2122:1316;2164:2;2146:8;:15;:20;;;;;;2142:1;:24;2122:1316;;;2206:29;2221:9;:1;2227:2;2221:9;:5;:9;:::i;:::-;2206:8;;2232:2;2206:29;:14;:29;:::i;:::-;2196:39;-1:-1:-1;2259:24:4;:13;2281:1;2277:5;;2259:24;:17;:24;:::i;:::-;2249:34;;2314:17;:7;:15;:17::i;:::-;2573:1;2532:29;;;:13;:29;;;;;;2297:34;;-1:-1:-1;2528:576:4;;2694:23;:7;:21;:23::i;:::-;2624:66;:52;2641:14;2624:32;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2624:32:4;;;:50;:52::i;:::-;:64;:66::i;:::-;:93;;2595:174;;;;;-1:-1:-1;;;2595:174:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:29;;;;:13;:29;;;;;:47;;;2313:1:3;2856:7:4;:25;2852:238;;3034:27;;;;:11;:27;;;;;:37;;;2852:238;3290:47;:7;3321:15;3290:47;:30;:47;:::i;:::-;3282:98;;;;-1:-1:-1;;;3282:98:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3413:14;;-1:-1:-1;2172:8:4;:1;2178;2172:8;:5;:8;:::i;:::-;2168:12;;2122:1316;;;;3507:14;3476:17;:7;:15;:17::i;:::-;3453:69;;;;;;;-1:-1:-1;3539:4:4;;1250:2300;-1:-1:-1;;;;;;;1250:2300:4:o;23489:148:5:-;23561:7;23587:43;23607:22;23621:7;23607:13;:22::i;:::-;23587:19;:43::i;16208:1308::-;16274:12;16308:19;:7;16322:1;16325;16308:19;:13;:19;:::i;:::-;16328:1;16308:22;;;;;;;;;;;;;;16298:1118;;16352:12;16411:1;16373:31;16396:7;16373:22;:31::i;:::-;16405:1;16373:34;;;;;;;;;;;;;;16367:45;:41;16352:60;;-1:-1:-1;16352:60:5;16499:20;:7;16513:2;16517:1;16499:20;:13;:20;:::i;:::-;16520:1;16499:23;;;;;;;;;;;;;;16493:45;16489:96;;-1:-1:-1;;16558:12:5;;;;;;;;;-1:-1:-1;16558:12:5;;;;16489:96;16605:23;:7;16619:2;16623:4;16605:23;:13;:23;:::i;:::-;16598:30;;;;;16298:1118;16659:12;16674:28;:7;16697:1;16700;16674:28;:22;:28;:::i;:::-;16749:22;;;-1:-1:-1;;;16749:22:5;;;;;;;;;;;;16659:43;;-1:-1:-1;16741:30:5;;16737:669;;;16858:20;:7;16872:2;16876:1;16858:20;:13;:20;:::i;:::-;16879:1;16858:23;;;;;;;;;;;;;;;16886:4;16852:38;;;:131;;;16963:20;;;;-1:-1:-1;;;16963:20:5;;;;;;;;;;;;;;16914:45;16954:1;16937:7;:14;:18;16957:1;16914:7;:22;;:45;;;;;:::i;:::-;:69;;16852:131;16848:190;;;-1:-1:-1;;17007:12:5;;;;;;;;;-1:-1:-1;17007:12:5;;;;16848:190;17062:21;:7;17076:2;17080;17062:21;:13;:21;:::i;16737:669::-;17135:22;;;-1:-1:-1;;;17135:22:5;;;;;;;;;;;;17127:30;;17123:283;;;17257:14;;17243:36;;17257:7;;-1:-1:-1;;17257:18:5;17274:1;17243:36;:13;:36;:::i;:::-;17280:1;17243:39;;;;;;;;;;;;;;;17287:4;17237:54;17233:113;;-1:-1:-1;;17315:12:5;;;;;;;;;-1:-1:-1;17315:12:5;;;;17233:113;17370:21;:7;17384:2;17388;17370:21;:13;:21;:::i;17123:283::-;16298:1118;-1:-1:-1;17425:12:5;;;;;;;;;-1:-1:-1;17425:12:5;;16208:1308;;;:::o;15625:308::-;15759:18;;;-1:-1:-1;;;15759:18:5;;;;;;;;;;;;;15699:12;;15727:28;;:7;;15750:1;;15727:22;:28::i;:::-;:50;15723:93;;-1:-1:-1;15793:12:5;;;;;;;;;-1:-1:-1;15793:12:5;;;;15723:93;15825:21;15849:20;:7;15863:2;15867:1;15849:20;:13;:20;:::i;:::-;15825:44;;15886:40;15900:2;15904:21;15916:8;15904:11;:21::i;:::-;15886:7;;:40;;:13;:40;:::i;15955:303:6:-;16108:26;;16019:14;;16086:7;;16104:72;;-1:-1:-1;16162:3:6;;-1:-1:-1;16155:10:6;;16104:72;-1:-1:-1;;16238:2:6;16225:16;16219:23;;16195:57::o;20053:133:5:-;20127:12;20158:21;:7;20172:2;20176;20158:21;:13;:21;:::i;1587:527:8:-;1745:4;1815:11;1806:5;:20;:35;;;;-1:-1:-1;1830:11:8;;1806:35;:69;;;;-1:-1:-1;1845:25:8;;:30;1806:69;1802:111;;;-1:-1:-1;1898:4:8;1891:11;;1802:111;1923:19;1962:5;1969:18;1989:11;1945: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;;1945:56:8;;;;;-1:-1:-1;1945:56:8;;;26:21:-1;;;6:49;;1945:56:8;;;;;;-1:-1:-1;1945:56:8;-1:-1:-1;2073:34:8;;-1:-1:-1;1945:56:8;;-1:-1:-1;2100:6:8;2073:26;:34::i;12337:156:2:-;12400:5;12461:24;12473:11;12461;:24::i;:::-;12430:28;12442:15;;12430:11;:28::i;:::-;:55;;12337:156;-1:-1:-1;;12337:156:2:o;17858:785:5:-;17921:4;17955:1;17921:4;17986:16;:4;17921;17955:1;17986:16;:10;:16;:::i;:::-;18003:1;17986:19;;;;;;;;;;;;;;;-1:-1:-1;18094:4:5;18085:13;;;;:27;;-1:-1:-1;18102:10:5;;;;18085:27;18081:70;;;18135:5;18128:12;;;;;;18081:70;18166:7;18161:379;18183:5;18179:9;;:1;:9;;;18161:379;;;18329:64;18350:42;18361:7;18384;18370:4;:11;:21;18350:4;:10;;:42;;;;;:::i;:::-;18329:20;:64::i;:::-;18472:11;;18318:75;;;18462:21;;18458:72;;;18510:5;18503:12;;;;;;;18458:72;18190:3;;18161:379;;;-1:-1:-1;;18625:11:5;;18614:22;;-1:-1:-1;17858:785:5;;;:::o;18922:797::-;18987:4;19021:1;18987:4;19053:17;:5;18987:4;19021:1;19053:17;:11;:17;:::i;:::-;19071:1;19053:20;;;;;;;;;;;;;;;-1:-1:-1;19163:4:5;19153:14;;;;:29;;-1:-1:-1;19171:11:5;;;;19153:29;19149:72;;;19205:5;19198:12;;;;;;19149:72;19236:7;19231:384;19253:6;19249:10;;:1;:10;;;19231:384;;;19400:67;19422:44;19434:7;19458;19443:5;:12;:22;19422:5;:11;;:44;;;;;:::i;:::-;19400:21;:67::i;:::-;19546:12;;19389:78;;;19536:22;;19532:73;;;19585:5;19578:12;;;;;;;19532:73;19261:3;;19231:384;;13598:577;13685:12;13709;13685;13783:1;13709:12;13795:213;13819:6;13814:11;;:2;:11;;;13795:213;;;13861:44;13873:7;13897;13882:5;:12;:22;13861:5;:11;;:44;;;;;:::i;:::-;13848:57;;13926:33;13948:10;13926:21;:33::i;:::-;13919:40;-1:-1:-1;13983:14:5;;;;13827:5;;13795:213;;;;14031:44;14043:7;14067;14052:5;:12;:22;14031:5;:11;;:44;;;;;:::i;:::-;14018:57;;14092:33;14114:10;14092:21;:33::i;:::-;14085:40;-1:-1:-1;14142:26:5;:5;14154:7;14085:40;14142:26;:11;:26;:::i;14394:134::-;14471:12;14502:19;:7;14516:1;14519;14502:19;:13;:19;:::i;10345:819:6:-;10432:16;10495:7;10486:6;:16;10468:6;:13;:35;;10460:67;;;;;-1:-1:-1;;;10460:67:6;;;;;;;;;;;;-1:-1:-1;;;10460:67:6;;;;;;;;;;;;;;;10664:4;10658:11;10651:18;;10713:7;10708:2;10703:3;10699:12;10695:26;10689:4;10682:40;10747:7;10742:3;10735:20;10874:6;10866;10862:19;10857:3;10853:29;10950:6;10945:2;10937:6;10933:15;10929:28;10994:7;10989:3;10985:17;10896:252;11025:3;11020;11017:12;10896:252;;;11129:3;11123:10;11116:4;11111:3;11107:14;11100:34;11064:2;11059:3;11055:12;11048:19;;10896:252;;;10900:116;;10547:611;;;;;;:::o;15106:246:5:-;15173:6;15191:21;15215:23;15230:7;15215:14;:23::i;:::-;15191:47;;15248:21;15272:27;15290:8;15272:17;:27::i;:::-;15248:51;;15323:21;15335:8;15323:11;:21::i;5875:568::-;5960:12;5984;5960;6058:1;5984:12;6070:210;6094:6;6089:11;;:2;:11;;;6070:210;;;6136:42;6147:7;6170;6156:4;:11;:21;6136:4;:10;;:42;;;;;:::i;:::-;6123:55;;6199:32;6220:10;6199:20;:32::i;:::-;6192:39;-1:-1:-1;6255:14:5;;;;6102:5;;6070:210;;;;6303:42;6314:7;6337;6323:4;:11;:21;6303:4;:10;;:42;;;;;:::i;:::-;6290:55;;6362:32;6383:10;6362:20;:32::i;10920:126::-;10989:12;11020:19;:6;11033:1;11036:2;11020:19;:12;:19;:::i;2288:160:7:-;2348:7;2381:2;2375;:8;;2367:50;;;;;-1:-1:-1;;;2367:50:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:7:7;;;2288:160::o;1317:456::-;1377:9;1619:7;1615:46;;-1:-1:-1;1649:1:7;1642:8;;1615:46;-1:-1:-1;1675:7:7;;;1680:2;1675;:7;:2;1700:6;;;;;:12;1692:56;;;;;-1:-1:-1;;;1692:56:7;;;;;;;;;;;;;;;;;;;;;;;;;;;20858:316:5;20926:7;20945:15;20963:20;:7;20977:2;20981:1;20963:20;:13;:20;:::i;:::-;20945:38;;20993:8;21010:7;21018:2;21010:11;;;;;;;;;;;;;;;-1:-1:-1;21032:17:5;21052:34;21064:21;21082:2;21064:17;:21::i;21052:34::-;-1:-1:-1;;21113:6:5;;;;21096:23;;21150:3;:16;21137:30;;;;20858:316;-1:-1:-1;;;;20858:316:5:o;1595:278::-;1662:12;1686:22;1721:2;:9;1711:20;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;1711:20:5;87:34:-1;135:17;;-1:-1;1711:20:5;-1:-1:-1;1686:45:5;-1:-1:-1;1747:6:5;1742:98;1763:2;:9;1759:1;:13;1742:98;;;1824:2;1827:1;1824:5;;;;;;;;;;;;;;;;1793:9;1819:1;1815;1803:2;:9;:13;:17;1793:28;;;;;;;;;;;:36;-1:-1:-1;;;;;1793:36:5;;;;;;;;-1:-1:-1;1774:3:5;;1742:98;;;-1:-1:-1;1857:9:5;1595:278;-1:-1:-1;;1595:278:5:o;3429:268::-;3490:7;;;3535:131;3556:2;:9;3552:1;:13;3535:131;;;3646:1;3650;3646:5;3633:2;:9;:19;3628:1;:25;3622:1;:32;3612:2;3615:1;3612:5;;;;;;;;;;;;;;3606:49;3596:59;;;;;3567:3;;3535:131;;9306:391:8;9410:4;9473:17;9493:40;:28;:7;:26;:28::i;:40::-;9473:60;;9635:17;9622:9;:30;9618:51;;9662:5;9655:12;;;;;9618:51;-1:-1:-1;9686:4:8;;9306:391;-1:-1:-1;;;9306:391:8:o;21554:178:5:-;21623:7;21700:25;-1:-1:-1;;;21717:7:5;21700:25;:16;:25;:::i;16264:296:6:-;16359:14;16420:7;16411:6;:16;16393:6;:13;:35;;16385:67;;;;;-1:-1:-1;;;16385:67:6;;;;;;;;;;;;-1:-1:-1;;;16385:67:6;;;;;;;;;;;;;;;-1:-1:-1;16506:28:6;;16522:2;16506:28;16496:48;;16472:82::o;24345:1009:5:-;24431:4;24507:2;24491:6;:13;:18;;;;;;:23;24487:66;;-1:-1:-1;24537:5:5;24530:12;;24487:66;24616:6;:13;24633:2;24616:19;24612:61;;;-1:-1:-1;24658:4:5;24651:11;;24612:61;24717:6;:13;24734:2;24717:19;24713:62;;;-1:-1:-1;24759:5:5;24752:12;;24713:62;24842:13;;24797:6;;24785:9;;24829:48;;:36;;24842:6;;-1:-1:-1;;24842:18:5;24858:2;24829:36;:12;:36;:::i;:48::-;24813:64;-1:-1:-1;24887:16:5;24906:31;:19;:6;24887:16;24922:2;24906:19;:12;:19;:::i;:31::-;24887:50;-1:-1:-1;24962:1:5;24948:366;24970:13;;24995:1;;24970:21;;24988:2;24970:21;:17;:21;:::i;:::-;24969:27;24965:1;:31;24948:366;;;25028:1;25021:4;:8;25033:1;25021:13;25017:257;;;25065:72;25084:24;:6;25101:2;25097:6;;;;25084:24;:12;:24;:::i;:::-;25127:8;25110:26;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25110:26:5;;;25065:18;:72::i;:::-;25054:83;;25017:257;;;25206:26;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;25206:26:5;;;;;;25187:72;;25234:24;;:6;;25247;;;;25234:24;:12;:24;:::i;:::-;25187:18;:72::i;:::-;25176:83;;25017:257;25302:1;25294:9;;;;24998:3;24948:366;;;-1:-1:-1;25330:17:5;;24345:1009;-1:-1:-1;;;;24345:1009:5:o;7075:282::-;7149:7;7168:20;7198:21;7263:27;7283:6;7263:19;:27::i;:::-;7307:6;:23;;;;:39;;;7349:1;7307:43;;7075:282;-1:-1:-1;;;;7075:282:5:o;12954:280::-;13030:7;;13068:19;:7;13082:1;13085;13068:19;:13;:19;:::i;:::-;13088:1;13068:22;;;;;;;;;;;;;;;-1:-1:-1;13116:4:5;13109:11;;13101:56;;;;;-1:-1:-1;;;13101:56:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13175:12;;13168:19;;;12954:280;-1:-1:-1;;12954:280:5:o;14763:126::-;14832:12;14863:19;:7;14877:1;14880;14863:19;:13;:19;:::i;21991:131::-;22064:12;22095:20;:7;22109:1;22112:2;22095:20;:13;:20;:::i;1865:301:7:-;1925:7;2157:2;2152;:7;;;;;;;1865:301;-1:-1:-1;;;1865:301:7:o;23873:151:5:-;23958:7;23984:33;24009:2;24013;23992: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;;23992:24:5;;;;;;;;;;-1:-1:-1;23992:24:5;;;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;;;23992:24:5;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;23992:24:5;;;23984:7;:33::i;9206:474::-;9279:5;;9305:23;9331:19;:6;9344:2;9348:1;9331:19;:12;:19;:::i;:::-;9305:45;;9360:20;9383:37;9409:10;9383:25;:37::i;:::-;9360:60;-1:-1:-1;9430:12:5;9456:19;;;9452:183;;9504:10;9515:1;9504:13;;;;;;;;;;;;;;;-1:-1:-1;9452:183:5;;;9556:68;9568:55;9586:36;:6;9599;9586:36;;;;:12;:36;:::i;:::-;9568:17;:55::i;9556:68::-;9549:75;;9452:183;9652:14;;-1:-1:-1;9668:4:5;-1:-1:-1;;9206:474:5;;;:::o;941:437::-;1019:5;1046;1052:1;1046:8;;;;;;;;;;;;;;;1040:15;:23;1036:94;;;-1:-1:-1;1086:1:5;1079:8;;1036:94;1149:5;1155:1;1149:8;;;;;;;;;;;;;;;1162:4;1143:23;1139:94;;;-1:-1:-1;1189:1:5;1182:8;;1139:94;1252:5;1258:1;1252:8;;;;;;;;;;;;;;;1265:4;1246:23;1242:94;;;-1:-1:-1;1292:1:5;1285:8;;1242:94;-1:-1:-1;1353:1:5;941:437;;;:::o",
  "source": "pragma solidity ^0.5.10;\n\n/** @title TestnetRelay */\n/** @author Summa (https://summa.one) */\n\nimport {OnDemandSPV} from \"./OnDemandSPV.sol\";\n\ncontract TestnetRelay is OnDemandSPV {\n\n    constructor(\n        bytes memory _genesisHeader,\n        uint256 _height,\n        bytes32 _periodStart,\n        uint256 _firstID\n    ) OnDemandSPV(\n        _genesisHeader,\n        _height,\n        _periodStart,\n        _firstID\n    ) public {return ;}\n\n    function _addHeadersWithRetarget(\n        bytes memory, // _oldPeriodStartHeader,\n        bytes memory _oldPeriodEndHeader,\n        bytes memory _headers\n    ) internal returns (bool) {\n        return _addHeaders(_oldPeriodEndHeader, _headers);\n    }\n\n    function _addHeaders(bytes memory _anchor, bytes memory _headers, bool) internal returns (bool) {\n        return _addHeaders(_anchor, _headers);\n    }\n\n    /// @notice             Adds headers to storage after validating\n    /// @dev                We check integrity and consistency of the header chain\n    /// @param  _anchor     The header immediately preceeding the new chain\n    /// @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n    /// @return             True if successfully written, error otherwise\n    function _addHeaders(bytes memory _anchor, bytes memory _headers) internal returns (bool) {\n        uint256 _height;\n        bytes memory _header;\n        bytes32 _currentDigest;\n        bytes32 _previousDigest = _anchor.hash256();\n\n        /* uint256 _target = _headers.slice(0, 80).extractTarget(); */\n        uint256 _anchorHeight = _findHeight(_previousDigest);  /* NB: errors if unknown */\n\n        /* require(\n            _internal || _anchor.extractTarget() == _target,\n            \"Unexpected retarget on external call\"); */\n        require(_headers.length % 80 == 0, \"Header array length must be divisible by 80\");\n\n        /*\n        NB:\n        1. check that the header has sufficient work\n        2. check that headers are in a coherent chain (no retargets, hash links good)\n        3. Store the block connection\n        4. Store the height\n        */\n        for (uint256 i = 0; i < _headers.length / 80; i = i.add(1)) {\n            _header = _headers.slice(i.mul(80), 80);\n            _height = _anchorHeight.add(i + 1);\n            _currentDigest = _header.hash256();\n\n            /*\n            NB:\n            if the block is already authenticated, we don't need to a work check\n            Or write anything to state. This saves gas\n            */\n            if (previousBlock[_currentDigest] == bytes32(0)) {\n                require(\n                    abi.encodePacked(_currentDigest).reverseEndianness().bytesToUint() <= _header.extractTarget(),\n                    \"Header work is insufficient\");\n                previousBlock[_currentDigest] = _previousDigest;\n                if (_height % HEIGHT_INTERVAL == 0) {\n                    /*\n                    NB: We store the height only every 4th header to save gas\n                    */\n                    blockHeight[_currentDigest] = _height;\n                }\n            }\n\n            /* NB: we do still need to make chain level checks tho */\n            /* require(_header.extractTarget() == _target, \"Target changed unexpectedly\"); */\n            require(_header.validateHeaderPrevHash(_previousDigest), \"Headers do not form a consistent chain\");\n\n            _previousDigest = _currentDigest;\n        }\n\n        emit Extension(\n            _anchor.hash256(),\n            _currentDigest);\n        return true;\n    }\n}\n",
  "sourcePath": "/home/james/devel/relays/solidity/contracts/TestnetRelay.sol",
  "ast": {
    "absolutePath": "/home/james/devel/relays/solidity/contracts/TestnetRelay.sol",
    "exportedSymbols": {
      "TestnetRelay": [
        2463
      ]
    },
    "id": 2464,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2254,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "/home/james/devel/relays/solidity/contracts/OnDemandSPV.sol",
        "file": "./OnDemandSPV.sol",
        "id": 2256,
        "nodeType": "ImportDirective",
        "scope": 2464,
        "sourceUnit": 1033,
        "src": "95:46:4",
        "symbolAliases": [
          {
            "foreign": 2255,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2257,
              "name": "OnDemandSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1032,
              "src": "168:11:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OnDemandSPV_$1032",
                "typeString": "contract OnDemandSPV"
              }
            },
            "id": 2258,
            "nodeType": "InheritanceSpecifier",
            "src": "168:11:4"
          }
        ],
        "contractDependencies": [
          85,
          1032,
          1166,
          2252
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2463,
        "linearizedBaseContracts": [
          2463,
          1032,
          2252,
          1166,
          85
        ],
        "name": "TestnetRelay",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2276,
              "nodeType": "Block",
              "src": "429:10:4",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 2274,
                  "id": 2275,
                  "nodeType": "Return",
                  "src": "430:8:4"
                }
              ]
            },
            "documentation": null,
            "id": 2277,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2269,
                    "name": "_genesisHeader",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2260,
                    "src": "344:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2270,
                    "name": "_height",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2262,
                    "src": "368:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2271,
                    "name": "_periodStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2264,
                    "src": "385:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2272,
                    "name": "_firstID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2266,
                    "src": "407:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 2273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2268,
                  "name": "OnDemandSPV",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1032,
                  "src": "323:11:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_OnDemandSPV_$1032_$",
                    "typeString": "type(contract OnDemandSPV)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "323:98:4"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2260,
                  "name": "_genesisHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "208:27:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2259,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "208:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2262,
                  "name": "_height",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "245:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2261,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "245:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2264,
                  "name": "_periodStart",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "270:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2263,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "270:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2266,
                  "name": "_firstID",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "300:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "198:124:4"
            },
            "returnParameters": {
              "id": 2274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "429:0:4"
            },
            "scope": 2463,
            "src": "187:252:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2293,
              "nodeType": "Block",
              "src": "629:66:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2289,
                        "name": "_oldPeriodEndHeader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2281,
                        "src": "658:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2290,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "679:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2288,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2311,
                        2462
                      ],
                      "referencedDeclaration": 2462,
                      "src": "646:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 2291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "646:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2287,
                  "id": 2292,
                  "nodeType": "Return",
                  "src": "639:49:4"
                }
              ]
            },
            "documentation": null,
            "id": 2294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeadersWithRetarget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "487:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2278,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "487:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2281,
                  "name": "_oldPeriodEndHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "535:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2280,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "535:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2283,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "577:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2282,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "477:127:4"
            },
            "returnParameters": {
              "id": 2287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2286,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "623:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2285,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "623:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "622:6:4"
            },
            "scope": 2463,
            "src": "445:250:4",
            "stateMutability": "nonpayable",
            "superFunction": 1615,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2310,
              "nodeType": "Block",
              "src": "797:54:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2306,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2296,
                        "src": "826:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2307,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2298,
                        "src": "835:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2305,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2311,
                        2462
                      ],
                      "referencedDeclaration": 2462,
                      "src": "814:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 2308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "814:30:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2304,
                  "id": 2309,
                  "nodeType": "Return",
                  "src": "807:37:4"
                }
              ]
            },
            "documentation": null,
            "id": 2311,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2296,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "722:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2295,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2298,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "744:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2297,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "744:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2300,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "767:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2299,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "767:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "721:51:4"
            },
            "returnParameters": {
              "id": 2304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "791:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2302,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:6:4"
            },
            "scope": 2463,
            "src": "701:150:4",
            "stateMutability": "nonpayable",
            "superFunction": 1454,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2461,
              "nodeType": "Block",
              "src": "1340:2210:4",
              "statements": [
                {
                  "assignments": [
                    2321
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2321,
                      "name": "_height",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1350:15:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2320,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1350:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2322,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1350:15:4"
                },
                {
                  "assignments": [
                    2324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2324,
                      "name": "_header",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1375:20:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2323,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1375:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2325,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1375:20:4"
                },
                {
                  "assignments": [
                    2327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2327,
                      "name": "_currentDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1405:22:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2326,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1405:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2328,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1405:22:4"
                },
                {
                  "assignments": [
                    2330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2330,
                      "name": "_previousDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1437:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2329,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1437:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2334,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2331,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2313,
                        "src": "1463:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2792,
                      "src": "1463:15:4",
                      "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": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1463:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1437:43:4"
                },
                {
                  "assignments": [
                    2336
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2336,
                      "name": "_anchorHeight",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1562:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2335,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1562:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2338,
                        "name": "_previousDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2330,
                        "src": "1598:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2337,
                      "name": "_findHeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1676,
                      "src": "1586:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 2339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1586:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1562:52:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2342,
                              "name": "_headers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2315,
                              "src": "1799:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1799:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3830",
                            "id": 2344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1817:2:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_80_by_1",
                              "typeString": "int_const 80"
                            },
                            "value": "80"
                          },
                          "src": "1799:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1823:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1799:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "486561646572206172726179206c656e677468206d75737420626520646976697369626c65206279203830",
                        "id": 2348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1826:45:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        },
                        "value": "Header array length must be divisible by 80"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        }
                      ],
                      "id": 2341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5026,
                        5027
                      ],
                      "referencedDeclaration": 5027,
                      "src": "1791:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1791:81:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2350,
                  "nodeType": "ExpressionStatement",
                  "src": "1791:81:4"
                },
                {
                  "body": {
                    "id": 2450,
                    "nodeType": "Block",
                    "src": "2182:1256:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2368,
                            "name": "_header",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2324,
                            "src": "2196:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "3830",
                                    "id": 2373,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2227:2:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2371,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2352,
                                    "src": "2221:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4305,
                                  "src": "2221:5:4",
                                  "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": 2374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2221:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "3830",
                                "id": 2375,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2232:2:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                },
                                "value": "80"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2369,
                                "name": "_headers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2315,
                                "src": "2206:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4133,
                              "src": "2206:14:4",
                              "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": 2376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2206:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2196:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2378,
                        "nodeType": "ExpressionStatement",
                        "src": "2196:39:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2379,
                            "name": "_height",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2321,
                            "src": "2249:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2382,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2352,
                                  "src": "2277:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2383,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2281:1:4",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2277:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2380,
                                "name": "_anchorHeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2336,
                                "src": "2259:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4365,
                              "src": "2259:17:4",
                              "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": 2385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2259:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2249:34:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2387,
                        "nodeType": "ExpressionStatement",
                        "src": "2249:34:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2388,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "2297:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2389,
                                "name": "_header",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2324,
                                "src": "2314:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2390,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hash256",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2792,
                              "src": "2314:15:4",
                              "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": 2391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2314:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2297:34:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2393,
                        "nodeType": "ExpressionStatement",
                        "src": "2297:34:4"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2394,
                              "name": "previousBlock",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1193,
                              "src": "2532:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 2396,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2395,
                              "name": "_currentDigest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2327,
                              "src": "2546:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2532:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2573:1:4",
                                "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": 2397,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2565:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 2399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2565:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2532:43:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2437,
                        "nodeType": "IfStatement",
                        "src": "2528:576:4",
                        "trueBody": {
                          "id": 2436,
                          "nodeType": "Block",
                          "src": "2577:527:4",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 2404,
                                                  "name": "_currentDigest",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2327,
                                                  "src": "2641:14:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 2402,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5010,
                                                  "src": "2624:3:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 2403,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodePacked",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2624:16:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 2405,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2624:32:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 2406,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "reverseEndianness",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2579,
                                            "src": "2624:50:4",
                                            "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": 2407,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2624:52:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2408,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "bytesToUint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2726,
                                        "src": "2624:64:4",
                                        "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": 2409,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2624:66:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2410,
                                          "name": "_header",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2324,
                                          "src": "2694:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2411,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "extractTarget",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3777,
                                        "src": "2694:21:4",
                                        "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": 2412,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2694:23:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2624:93:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "48656164657220776f726b20697320696e73756666696369656e74",
                                    "id": 2414,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2739:29:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    },
                                    "value": "Header work is insufficient"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    }
                                  ],
                                  "id": 2401,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    5026,
                                    5027
                                  ],
                                  "referencedDeclaration": 5027,
                                  "src": "2595:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2595:174:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2416,
                              "nodeType": "ExpressionStatement",
                              "src": "2595:174:4"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2421,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2417,
                                    "name": "previousBlock",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1193,
                                    "src": "2787:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                      "typeString": "mapping(bytes32 => bytes32)"
                                    }
                                  },
                                  "id": 2419,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 2418,
                                    "name": "_currentDigest",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2327,
                                    "src": "2801:14:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2787:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2420,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2330,
                                  "src": "2819:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2787:47:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 2422,
                              "nodeType": "ExpressionStatement",
                              "src": "2787:47:4"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2425,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2423,
                                    "name": "_height",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2321,
                                    "src": "2856:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2424,
                                    "name": "HEIGHT_INTERVAL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1183,
                                    "src": "2866:15:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "2856:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 2426,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2885:1:4",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2856:30:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 2435,
                              "nodeType": "IfStatement",
                              "src": "2852:238:4",
                              "trueBody": {
                                "id": 2434,
                                "nodeType": "Block",
                                "src": "2888:202:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2432,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2428,
                                          "name": "blockHeight",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1197,
                                          "src": "3034:11:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                            "typeString": "mapping(bytes32 => uint256)"
                                          }
                                        },
                                        "id": 2430,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2429,
                                          "name": "_currentDigest",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2327,
                                          "src": "3046:14:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3034:27:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 2431,
                                        "name": "_height",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2321,
                                        "src": "3064:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3034:37:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2433,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3034:37:4"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2441,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2330,
                                  "src": "3321:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2439,
                                  "name": "_header",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2324,
                                  "src": "3290:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "validateHeaderPrevHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5007,
                                "src": "3290:30:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,bytes32) pure returns (bool)"
                                }
                              },
                              "id": 2442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3290:47:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e",
                              "id": 2443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3339:40:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              },
                              "value": "Headers do not form a consistent chain"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              }
                            ],
                            "id": 2438,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5026,
                              5027
                            ],
                            "referencedDeclaration": 5027,
                            "src": "3282:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3282:98:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2445,
                        "nodeType": "ExpressionStatement",
                        "src": "3282:98:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2446,
                            "name": "_previousDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2330,
                            "src": "3395:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2447,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "3413:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3395:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2449,
                        "nodeType": "ExpressionStatement",
                        "src": "3395:32:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2355,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "2142:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2356,
                          "name": "_headers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2315,
                          "src": "2146:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2146:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3830",
                        "id": 2358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2164:2:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_80_by_1",
                          "typeString": "int_const 80"
                        },
                        "value": "80"
                      },
                      "src": "2146:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2142:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2451,
                  "initializationExpression": {
                    "assignments": [
                      2352
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2352,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2451,
                        "src": "2127:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2351,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2354,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2139:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2127:13:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2361,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2352,
                        "src": "2168:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2178:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2362,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "2172:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4365,
                          "src": "2172:5:4",
                          "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": 2365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2172:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2168:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2367,
                    "nodeType": "ExpressionStatement",
                    "src": "2168:12:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "2122:1316:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2453,
                            "name": "_anchor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2313,
                            "src": "3476:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hash256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2792,
                          "src": "3476:15:4",
                          "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": 2455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3476:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2456,
                        "name": "_currentDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2327,
                        "src": "3507:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2452,
                      "name": "Extension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1048,
                      "src": "3453:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 2457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3453:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2458,
                  "nodeType": "EmitStatement",
                  "src": "3448:74:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3539:4:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2319,
                  "id": 2460,
                  "nodeType": "Return",
                  "src": "3532:11:4"
                }
              ]
            },
            "documentation": "@notice             Adds headers to storage after validating\n @dev                We check integrity and consistency of the header chain\n @param  _anchor     The header immediately preceeding the new chain\n @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n @return             True if successfully written, error otherwise",
            "id": 2462,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2313,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1271:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2312,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2315,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1293:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2314,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1270:45:4"
            },
            "returnParameters": {
              "id": 2319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1334:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2317,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1334:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1333:6:4"
            },
            "scope": 2463,
            "src": "1250:2300:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2464,
        "src": "143:3409:4"
      }
    ],
    "src": "0:3553:4"
  },
  "legacyAST": {
    "absolutePath": "/home/james/devel/relays/solidity/contracts/TestnetRelay.sol",
    "exportedSymbols": {
      "TestnetRelay": [
        2463
      ]
    },
    "id": 2464,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2254,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:4"
      },
      {
        "absolutePath": "/home/james/devel/relays/solidity/contracts/OnDemandSPV.sol",
        "file": "./OnDemandSPV.sol",
        "id": 2256,
        "nodeType": "ImportDirective",
        "scope": 2464,
        "sourceUnit": 1033,
        "src": "95:46:4",
        "symbolAliases": [
          {
            "foreign": 2255,
            "local": null
          }
        ],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 2257,
              "name": "OnDemandSPV",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1032,
              "src": "168:11:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OnDemandSPV_$1032",
                "typeString": "contract OnDemandSPV"
              }
            },
            "id": 2258,
            "nodeType": "InheritanceSpecifier",
            "src": "168:11:4"
          }
        ],
        "contractDependencies": [
          85,
          1032,
          1166,
          2252
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2463,
        "linearizedBaseContracts": [
          2463,
          1032,
          2252,
          1166,
          85
        ],
        "name": "TestnetRelay",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2276,
              "nodeType": "Block",
              "src": "429:10:4",
              "statements": [
                {
                  "expression": null,
                  "functionReturnParameters": 2274,
                  "id": 2275,
                  "nodeType": "Return",
                  "src": "430:8:4"
                }
              ]
            },
            "documentation": null,
            "id": 2277,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 2269,
                    "name": "_genesisHeader",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2260,
                    "src": "344:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2270,
                    "name": "_height",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2262,
                    "src": "368:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2271,
                    "name": "_periodStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2264,
                    "src": "385:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 2272,
                    "name": "_firstID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2266,
                    "src": "407:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 2273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 2268,
                  "name": "OnDemandSPV",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1032,
                  "src": "323:11:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_OnDemandSPV_$1032_$",
                    "typeString": "type(contract OnDemandSPV)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "323:98:4"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2260,
                  "name": "_genesisHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "208:27:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2259,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "208:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2262,
                  "name": "_height",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "245:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2261,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "245:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2264,
                  "name": "_periodStart",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "270:20:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2263,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "270:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2266,
                  "name": "_firstID",
                  "nodeType": "VariableDeclaration",
                  "scope": 2277,
                  "src": "300:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "198:124:4"
            },
            "returnParameters": {
              "id": 2274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "429:0:4"
            },
            "scope": 2463,
            "src": "187:252:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2293,
              "nodeType": "Block",
              "src": "629:66:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2289,
                        "name": "_oldPeriodEndHeader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2281,
                        "src": "658:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2290,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2283,
                        "src": "679:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2288,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2311,
                        2462
                      ],
                      "referencedDeclaration": 2462,
                      "src": "646:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 2291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "646:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2287,
                  "id": 2292,
                  "nodeType": "Return",
                  "src": "639:49:4"
                }
              ]
            },
            "documentation": null,
            "id": 2294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeadersWithRetarget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2279,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "487:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2278,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "487:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2281,
                  "name": "_oldPeriodEndHeader",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "535:32:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2280,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "535:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2283,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "577:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2282,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "577:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "477:127:4"
            },
            "returnParameters": {
              "id": 2287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2286,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2294,
                  "src": "623:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2285,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "623:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "622:6:4"
            },
            "scope": 2463,
            "src": "445:250:4",
            "stateMutability": "nonpayable",
            "superFunction": 1615,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2310,
              "nodeType": "Block",
              "src": "797:54:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2306,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2296,
                        "src": "826:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2307,
                        "name": "_headers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2298,
                        "src": "835:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2305,
                      "name": "_addHeaders",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2311,
                        2462
                      ],
                      "referencedDeclaration": 2462,
                      "src": "814:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes memory,bytes memory) returns (bool)"
                      }
                    },
                    "id": 2308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "814:30:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2304,
                  "id": 2309,
                  "nodeType": "Return",
                  "src": "807:37:4"
                }
              ]
            },
            "documentation": null,
            "id": 2311,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2296,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "722:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2295,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2298,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "744:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2297,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "744:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2300,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "767:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2299,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "767:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "721:51:4"
            },
            "returnParameters": {
              "id": 2304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2311,
                  "src": "791:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2302,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "791:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "790:6:4"
            },
            "scope": 2463,
            "src": "701:150:4",
            "stateMutability": "nonpayable",
            "superFunction": 1454,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2461,
              "nodeType": "Block",
              "src": "1340:2210:4",
              "statements": [
                {
                  "assignments": [
                    2321
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2321,
                      "name": "_height",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1350:15:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2320,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1350:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2322,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1350:15:4"
                },
                {
                  "assignments": [
                    2324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2324,
                      "name": "_header",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1375:20:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2323,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1375:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2325,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1375:20:4"
                },
                {
                  "assignments": [
                    2327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2327,
                      "name": "_currentDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1405:22:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2326,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1405:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2328,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1405:22:4"
                },
                {
                  "assignments": [
                    2330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2330,
                      "name": "_previousDigest",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1437:23:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2329,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1437:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2334,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2331,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2313,
                        "src": "1463:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 2332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "hash256",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2792,
                      "src": "1463:15:4",
                      "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": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1463:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1437:43:4"
                },
                {
                  "assignments": [
                    2336
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2336,
                      "name": "_anchorHeight",
                      "nodeType": "VariableDeclaration",
                      "scope": 2461,
                      "src": "1562:21:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2335,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1562:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2340,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2338,
                        "name": "_previousDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2330,
                        "src": "1598:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2337,
                      "name": "_findHeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1676,
                      "src": "1586:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (bytes32) view returns (uint256)"
                      }
                    },
                    "id": 2339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1586:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1562:52:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 2342,
                              "name": "_headers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2315,
                              "src": "1799:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1799:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3830",
                            "id": 2344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1817:2:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_80_by_1",
                              "typeString": "int_const 80"
                            },
                            "value": "80"
                          },
                          "src": "1799:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1823:1:4",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1799:25:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "486561646572206172726179206c656e677468206d75737420626520646976697369626c65206279203830",
                        "id": 2348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1826:45:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        },
                        "value": "Header array length must be divisible by 80"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_64951f0822ebc61755f01c687a3aabd90c37a5b5a62d0764ef2ec9edb60caca4",
                          "typeString": "literal_string \"Header array length must be divisible by 80\""
                        }
                      ],
                      "id": 2341,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5026,
                        5027
                      ],
                      "referencedDeclaration": 5027,
                      "src": "1791:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1791:81:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2350,
                  "nodeType": "ExpressionStatement",
                  "src": "1791:81:4"
                },
                {
                  "body": {
                    "id": 2450,
                    "nodeType": "Block",
                    "src": "2182:1256:4",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2368,
                            "name": "_header",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2324,
                            "src": "2196:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "3830",
                                    "id": 2373,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2227:2:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2371,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2352,
                                    "src": "2221:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2372,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4305,
                                  "src": "2221:5:4",
                                  "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": 2374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2221:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "3830",
                                "id": 2375,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2232:2:4",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                },
                                "value": "80"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_80_by_1",
                                  "typeString": "int_const 80"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2369,
                                "name": "_headers",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2315,
                                "src": "2206:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "slice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4133,
                              "src": "2206:14:4",
                              "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": 2376,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2206:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2196:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2378,
                        "nodeType": "ExpressionStatement",
                        "src": "2196:39:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2379,
                            "name": "_height",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2321,
                            "src": "2249:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 2382,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2352,
                                  "src": "2277:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "31",
                                  "id": 2383,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2281:1:4",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "2277:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2380,
                                "name": "_anchorHeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2336,
                                "src": "2259:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4365,
                              "src": "2259:17:4",
                              "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": 2385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2259:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2249:34:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2387,
                        "nodeType": "ExpressionStatement",
                        "src": "2249:34:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2388,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "2297:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 2389,
                                "name": "_header",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2324,
                                "src": "2314:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2390,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "hash256",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2792,
                              "src": "2314:15:4",
                              "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": 2391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2314:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2297:34:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2393,
                        "nodeType": "ExpressionStatement",
                        "src": "2297:34:4"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2394,
                              "name": "previousBlock",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1193,
                              "src": "2532:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                "typeString": "mapping(bytes32 => bytes32)"
                              }
                            },
                            "id": 2396,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2395,
                              "name": "_currentDigest",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2327,
                              "src": "2546:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2532:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2398,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2573:1:4",
                                "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": 2397,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2565:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": "bytes32"
                            },
                            "id": 2399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2565:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "2532:43:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2437,
                        "nodeType": "IfStatement",
                        "src": "2528:576:4",
                        "trueBody": {
                          "id": 2436,
                          "nodeType": "Block",
                          "src": "2577:527:4",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "expression": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                {
                                                  "argumentTypes": null,
                                                  "id": 2404,
                                                  "name": "_currentDigest",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2327,
                                                  "src": "2641:14:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 2402,
                                                  "name": "abi",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 5010,
                                                  "src": "2624:3:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_magic_abi",
                                                    "typeString": "abi"
                                                  }
                                                },
                                                "id": 2403,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "encodePacked",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": null,
                                                "src": "2624:16:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                  "typeString": "function () pure returns (bytes memory)"
                                                }
                                              },
                                              "id": 2405,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "2624:32:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 2406,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "reverseEndianness",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 2579,
                                            "src": "2624:50:4",
                                            "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": 2407,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "2624:52:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2408,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "bytesToUint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2726,
                                        "src": "2624:64:4",
                                        "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": 2409,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2624:66:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<=",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2410,
                                          "name": "_header",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2324,
                                          "src": "2694:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 2411,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "extractTarget",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3777,
                                        "src": "2694:21:4",
                                        "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": 2412,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2694:23:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2624:93:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "48656164657220776f726b20697320696e73756666696369656e74",
                                    "id": 2414,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2739:29:4",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    },
                                    "value": "Header work is insufficient"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_577a884d824749cadf11f1d13d4dc4655ad406f62456ad5e910541517ce4d497",
                                      "typeString": "literal_string \"Header work is insufficient\""
                                    }
                                  ],
                                  "id": 2401,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    5026,
                                    5027
                                  ],
                                  "referencedDeclaration": 5027,
                                  "src": "2595:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 2415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2595:174:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2416,
                              "nodeType": "ExpressionStatement",
                              "src": "2595:174:4"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2421,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2417,
                                    "name": "previousBlock",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1193,
                                    "src": "2787:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_bytes32_$",
                                      "typeString": "mapping(bytes32 => bytes32)"
                                    }
                                  },
                                  "id": 2419,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 2418,
                                    "name": "_currentDigest",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2327,
                                    "src": "2801:14:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2787:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 2420,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2330,
                                  "src": "2819:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "2787:47:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 2422,
                              "nodeType": "ExpressionStatement",
                              "src": "2787:47:4"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2425,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 2423,
                                    "name": "_height",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2321,
                                    "src": "2856:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "%",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 2424,
                                    "name": "HEIGHT_INTERVAL",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1183,
                                    "src": "2866:15:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "2856:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 2426,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2885:1:4",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2856:30:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 2435,
                              "nodeType": "IfStatement",
                              "src": "2852:238:4",
                              "trueBody": {
                                "id": 2434,
                                "nodeType": "Block",
                                "src": "2888:202:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 2432,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 2428,
                                          "name": "blockHeight",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1197,
                                          "src": "3034:11:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$",
                                            "typeString": "mapping(bytes32 => uint256)"
                                          }
                                        },
                                        "id": 2430,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 2429,
                                          "name": "_currentDigest",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2327,
                                          "src": "3046:14:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3034:27:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "id": 2431,
                                        "name": "_height",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2321,
                                        "src": "3064:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3034:37:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2433,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3034:37:4"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2441,
                                  "name": "_previousDigest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2330,
                                  "src": "3321:15:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2439,
                                  "name": "_header",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2324,
                                  "src": "3290:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 2440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "validateHeaderPrevHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5007,
                                "src": "3290:30:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes memory,bytes32) pure returns (bool)"
                                }
                              },
                              "id": 2442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3290:47:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4865616465727320646f206e6f7420666f726d206120636f6e73697374656e7420636861696e",
                              "id": 2443,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3339:40:4",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              },
                              "value": "Headers do not form a consistent chain"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_09edac151df9e4894b9dc57d4b428f162596747b62bb7347fd3851a717f60df7",
                                "typeString": "literal_string \"Headers do not form a consistent chain\""
                              }
                            ],
                            "id": 2438,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5026,
                              5027
                            ],
                            "referencedDeclaration": 5027,
                            "src": "3282:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3282:98:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2445,
                        "nodeType": "ExpressionStatement",
                        "src": "3282:98:4"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2446,
                            "name": "_previousDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2330,
                            "src": "3395:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2447,
                            "name": "_currentDigest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "3413:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3395:32:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2449,
                        "nodeType": "ExpressionStatement",
                        "src": "3395:32:4"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2355,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2352,
                      "src": "2142:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2356,
                          "name": "_headers",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2315,
                          "src": "2146:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 2357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2146:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "3830",
                        "id": 2358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2164:2:4",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_80_by_1",
                          "typeString": "int_const 80"
                        },
                        "value": "80"
                      },
                      "src": "2146:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2142:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2451,
                  "initializationExpression": {
                    "assignments": [
                      2352
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2352,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2451,
                        "src": "2127:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2351,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 2354,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 2353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2139:1:4",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2127:13:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 2366,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "id": 2361,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2352,
                        "src": "2168:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 2364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2178:1:4",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2362,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2352,
                            "src": "2172:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4365,
                          "src": "2172:5:4",
                          "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": 2365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2172:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2168:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2367,
                    "nodeType": "ExpressionStatement",
                    "src": "2168:12:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "2122:1316:4"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2453,
                            "name": "_anchor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2313,
                            "src": "3476:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 2454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "hash256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2792,
                          "src": "3476:15:4",
                          "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": 2455,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3476:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2456,
                        "name": "_currentDigest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2327,
                        "src": "3507:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2452,
                      "name": "Extension",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1048,
                      "src": "3453:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32,bytes32)"
                      }
                    },
                    "id": 2457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3453:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2458,
                  "nodeType": "EmitStatement",
                  "src": "3448:74:4"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3539:4:4",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2319,
                  "id": 2460,
                  "nodeType": "Return",
                  "src": "3532:11:4"
                }
              ]
            },
            "documentation": "@notice             Adds headers to storage after validating\n @dev                We check integrity and consistency of the header chain\n @param  _anchor     The header immediately preceeding the new chain\n @param  _headers    A tightly-packed list of new 80-byte Bitcoin headers to record\n @return             True if successfully written, error otherwise",
            "id": 2462,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addHeaders",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2313,
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1271:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2312,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2315,
                  "name": "_headers",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1293:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2314,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1270:45:4"
            },
            "returnParameters": {
              "id": 2319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2318,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2462,
                  "src": "1334:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2317,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1334:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1333:6:4"
            },
            "scope": 2463,
            "src": "1250:2300:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2464,
        "src": "143:3409:4"
      }
    ],
    "src": "0:3553:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.10+commit.5a6ea5b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.23",
  "updatedAt": "2020-04-10T23:35:59.862Z",
  "networkType": "ethereum",
  "devdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "details": "We check integrity and consistency of the header chain",
        "params": {
          "_anchor": "The header immediately preceeding the new chain",
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers"
        },
        "return": "True if successfully written, error otherwise"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "details": "Checks the retarget, the heights, and the linkage",
        "params": {
          "_headers": "A tightly-packed list of 80-byte Bitcoin headers",
          "_oldPeriodEndHeader": "The last header in the difficulty period being closed",
          "_oldPeriodStartHeader": "The first header in the difficulty period being closed"
        },
        "return": "True if successfully written, error otherwise"
      },
      "cancelRequest(uint256)": {
        "details": "Prevents the relay from forwarding tx infromation",
        "params": {
          "_requestID": "The ID of the request to be cancelled"
        },
        "return": "True if succesful, error otherwise"
      },
      "findAncestor(bytes32,uint256)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "findHeight(bytes32)": {
        "details": "Will fail if the header is unknown",
        "params": {
          "_digest": "The header digest to search for"
        },
        "return": "The height of the header, or error if unknown"
      },
      "getBestKnownDigest()": {
        "details": "This updated only by calling markNewHeaviest",
        "return": "The hash of the best marked chain tip"
      },
      "getCurrentEpochDifficulty()": {
        "details": "This is updated when a new heavist header has a new diff",
        "return": "The difficulty of the bestKnownDigest"
      },
      "getLastReorgCommonAncestor()": {
        "details": "This is updated only by calling markNewHeaviest",
        "return": "The hash of the shared ancestor of the most recent fork"
      },
      "getPrevEpochDifficulty()": {
        "details": "This is updated when a difficulty change is accepted",
        "return": "The difficulty of the previous epoch"
      },
      "getRelayGenesis()": {
        "details": "This is an initialization parameter",
        "return": "The hash of the first block of the relay"
      },
      "getRequest(uint256)": {
        "details": "Requests ids are numerical",
        "params": {
          "_requestID": "The numerical ID of the request"
        },
        "return": "A tuple representation of the request struct"
      },
      "heaviestFromAncestor(bytes32,bytes,bytes)": {
        "details": "Does not support reorgs above 2017 blocks (:",
        "params": {
          "_ancestor": "The prospective shared ancestor",
          "_left": "A chain tip",
          "_right": "A chain tip"
        },
        "return": "true if it is the most recent common ancestor within _limit, false otherwise"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "details": "Limit the amount of lookups (and thus gas usage) with _limit",
        "params": {
          "_ancestor": "The prospective ancestor",
          "_descendant": "The descendant to check",
          "_limit": "The maximum number of blocks to check"
        },
        "return": "true if ancestor is at most limit blocks lower than descendant, otherwise false"
      },
      "isMostRecentAncestor(bytes32,bytes32,bytes32,uint256)": {
        "details": "Limit the amount of lookups (and thus gas usage) with _limit",
        "params": {
          "_ancestor": "The prospective shared ancestor",
          "_left": "A chain tip",
          "_limit": "The maximum number of blocks to check",
          "_right": "A chain tip"
        },
        "return": "true if it is the most recent common ancestor within _limit, false otherwise"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "details": "We don't check this AT ALL really. Don't use relays with bad genesis",
        "params": {
          "_ancestor": "The digest of the most recent common ancestor",
          "_currentBest": "The 80-byte header referenced by bestKnownDigest",
          "_limit": "Limit the amount of traversal of the chain",
          "_newBest": "The 80-byte header to mark as the new best"
        },
        "return": "True if successfully updates bestKnownDigest, error otherwise"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "details": "The caller must specify which inputs, which outputs, and which request",
        "params": {
          "_header": "The header containing the merkleroot committing to the tx",
          "_index": "The index of the tx in the merkle tree's leaves",
          "_locktime": "The tx locktime, always the last 4 bytes of the tx",
          "_proof": "The merkle proof intermediate nodes",
          "_reqIndices": "The input and output index to check against the request, packed",
          "_requestID": "The id of the request that has been triggered",
          "_version": "The tx version, always the first 4 bytes of the tx",
          "_vin": "The tx input vector",
          "_vout": "The tx output vector"
        },
        "return": "True if succesful, error otherwise"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "details": "The request can be a spent utxo and/or a created utxo",
        "params": {
          "_consumer": "The address of a ISPVConsumer exposing spv",
          "_notBefore": "A timestamp before which proofs are not accepted",
          "_numConfs": "The minimum number of Bitcoin confirmations to accept",
          "_pays": "An output script that must be paid in acceptable txns (optional)",
          "_paysValue": "A minimum value that must be paid to the output script (optional)",
          "_spends": "An outpoint that must be spent in acceptable txns (optional)"
        },
        "return": "A unique request ID."
      }
    }
  },
  "userdoc": {
    "methods": {
      "addHeaders(bytes,bytes)": {
        "notice": "Adds headers to storage after validating"
      },
      "addHeadersWithRetarget(bytes,bytes,bytes)": {
        "notice": "Adds headers to storage, performs additional validation of retarget"
      },
      "cancelRequest(uint256)": {
        "notice": "Cancel a bitcoin event request."
      },
      "findAncestor(bytes32,uint256)": {
        "notice": "Finds an ancestor for a block by its digest"
      },
      "findHeight(bytes32)": {
        "notice": "Finds the height of a header by its digest"
      },
      "getBestKnownDigest()": {
        "notice": "Getter for bestKnownDigest"
      },
      "getCurrentEpochDifficulty()": {
        "notice": "Getter for currentEpochDiff"
      },
      "getLastReorgCommonAncestor()": {
        "notice": "Getter for relayGenesis"
      },
      "getPrevEpochDifficulty()": {
        "notice": "Getter for prevEpochDiff"
      },
      "getRelayGenesis()": {
        "notice": "Getter for relayGenesis"
      },
      "getRequest(uint256)": {
        "notice": "Retrieve info about a request"
      },
      "heaviestFromAncestor(bytes32,bytes,bytes)": {
        "notice": "Decides which header is heaviest from the ancestor"
      },
      "isAncestor(bytes32,bytes32,uint256)": {
        "notice": "Checks if a digest is an ancestor of the current one"
      },
      "isMostRecentAncestor(bytes32,bytes32,bytes32,uint256)": {
        "notice": "Checks if a digest is an ancestor of the current one"
      },
      "markNewHeaviest(bytes32,bytes,bytes,uint256)": {
        "notice": "Gives a starting point for the relay"
      },
      "provideProof(bytes,bytes,bytes4,bytes4,uint256,uint16,bytes,bytes,uint256)": {
        "notice": "Provide a proof of a tx that satisfies some request"
      },
      "request(bytes,bytes,uint64,address,uint8,uint256)": {
        "notice": "Subscribe to a feed of Bitcoin txns matching a request"
      }
    }
  }
}