{
  "contractName": "BytesLib",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"https://github.com/GNSPS *\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":\"BytesLib\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol\":{\"keccak256\":\"0x43451fdb4c4d55c01122411a4cf89a5c544c2bd4b646ee1d1f306626275324bf\",\"urls\":[\"bzz-raw://db93f07c32fa294d416aaab1b19a205772f2a3fa573fd380e5641e7770193ccf\",\"dweb:/ipfs/QmVE4y8cFKWZGKEfTM9Q3YreAArpMTTALHNr2tcvcNDnbi\"]}},\"version\":1}",
  "bytecode": "0x60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158208d2a97e44414d436283d6e95bea5320ffdca6d4d5e8e63cb5fe14864376bd46964736f6c63430005110032",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158208d2a97e44414d436283d6e95bea5320ffdca6d4d5e8e63cb5fe14864376bd46964736f6c63430005110032",
  "sourceMap": "1360:15389:49:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "1360:15389:49:-;;;;;;;;",
  "source": "pragma solidity ^0.5.10;\n\n/*\n\nhttps://github.com/GNSPS/solidity-bytes-utils/\n\nThis is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to <https://unlicense.org>\n*/\n\n\n/** @title BytesLib **/\n/** @author https://github.com/GNSPS **/\n\nlibrary BytesLib {\n    function concat(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bytes memory) {\n        bytes memory tempBytes;\n\n        assembly {\n            // Get a location of some free memory and store it in tempBytes as\n            // Solidity does for memory variables.\n            tempBytes := mload(0x40)\n\n            // Store the length of the first bytes array at the beginning of\n            // the memory for tempBytes.\n            let length := mload(_preBytes)\n            mstore(tempBytes, length)\n\n            // Maintain a memory counter for the current write location in the\n            // temp bytes array by adding the 32 bytes for the array length to\n            // the starting location.\n            let mc := add(tempBytes, 0x20)\n            // Stop copying when the memory counter reaches the length of the\n            // first bytes array.\n            let end := add(mc, length)\n\n            for {\n                // Initialize a copy counter to the start of the _preBytes data,\n                // 32 bytes into its memory.\n                let cc := add(_preBytes, 0x20)\n            } lt(mc, end) {\n                // Increase both counters by 32 bytes each iteration.\n                mc := add(mc, 0x20)\n                cc := add(cc, 0x20)\n            } {\n                // Write the _preBytes data into the tempBytes memory 32 bytes\n                // at a time.\n                mstore(mc, mload(cc))\n            }\n\n            // Add the length of _postBytes to the current length of tempBytes\n            // and store it as the new length in the first 32 bytes of the\n            // tempBytes memory.\n            length := mload(_postBytes)\n            mstore(tempBytes, add(length, mload(tempBytes)))\n\n            // Move the memory counter back from a multiple of 0x20 to the\n            // actual end of the _preBytes data.\n            mc := end\n            // Stop copying when the memory counter reaches the new combined\n            // length of the arrays.\n            end := add(mc, length)\n\n            for {\n                let cc := add(_postBytes, 0x20)\n            } lt(mc, end) {\n                mc := add(mc, 0x20)\n                cc := add(cc, 0x20)\n            } {\n                mstore(mc, mload(cc))\n            }\n\n            // Update the free-memory pointer by padding our last write location\n            // to 32 bytes: add 31 bytes to the end of tempBytes to move to the\n            // next 32 byte block, then round down to the nearest multiple of\n            // 32. If the sum of the length of the two arrays is zero then add\n            // one before rounding down to leave a blank 32 bytes (the length block with 0).\n            mstore(0x40, and(\n                add(add(end, iszero(add(length, mload(_preBytes)))), 31),\n                not(31) // Round down to the nearest 32 bytes.\n            ))\n        }\n\n        return tempBytes;\n    }\n\n    function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal {\n        assembly {\n            // Read the first 32 bytes of _preBytes storage, which is the length\n            // of the array. (We don't need to use the offset into the slot\n            // because arrays use the entire slot.)\n            let fslot := sload(_preBytes_slot)\n            // Arrays of 31 bytes or less have an even value in their slot,\n            // while longer arrays have an odd value. The actual length is\n            // the slot divided by two for odd values, and the lowest order\n            // byte divided by two for even values.\n            // If the slot is even, bitwise and the slot with 255 and divide by\n            // two to get the length. If the slot is odd, bitwise and the slot\n            // with -1 and divide by two.\n            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n            let mlength := mload(_postBytes)\n            let newlength := add(slength, mlength)\n            // slength can contain both the length and contents of the array\n            // if length < 32 bytes so let's prepare for that\n            // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage\n            switch add(lt(slength, 32), lt(newlength, 32))\n            case 2 {\n                // Since the new array still fits in the slot, we just need to\n                // update the contents of the slot.\n                // uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length\n                sstore(\n                    _preBytes_slot,\n                    // all the modifications to the slot are inside this\n                    // next block\n                    add(\n                        // we can just add to the slot contents because the\n                        // bytes we want to change are the LSBs\n                        fslot,\n                        add(\n                            mul(\n                                div(\n                                    // load the bytes from memory\n                                    mload(add(_postBytes, 0x20)),\n                                    // zero all bytes to the right\n                                    exp(0x100, sub(32, mlength))\n                        ),\n                        // and now shift left the number of bytes to\n                        // leave space for the length in the slot\n                        exp(0x100, sub(32, newlength))\n                        ),\n                        // increase length by the double of the memory\n                        // bytes length\n                        mul(mlength, 2)\n                        )\n                    )\n                )\n            }\n            case 1 {\n                // The stored value fits in the slot, but the combined value\n                // will exceed it.\n                // get the keccak hash to get the contents of the array\n                mstore(0x0, _preBytes_slot)\n                let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n\n                // save new length\n                sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n\n                // The contents of the _postBytes array start 32 bytes into\n                // the structure. Our first read should obtain the `submod`\n                // bytes that can fit into the unused space in the last word\n                // of the stored array. To get this, we read 32 bytes starting\n                // from `submod`, so the data we read overlaps with the array\n                // contents by `submod` bytes. Masking the lowest-order\n                // `submod` bytes allows us to add that value directly to the\n                // stored value.\n\n                let submod := sub(32, slength)\n                let mc := add(_postBytes, submod)\n                let end := add(_postBytes, mlength)\n                let mask := sub(exp(0x100, submod), 1)\n\n                sstore(\n                    sc,\n                    add(\n                        and(\n                            fslot,\n                            0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00\n                    ),\n                    and(mload(mc), mask)\n                    )\n                )\n\n                for {\n                    mc := add(mc, 0x20)\n                    sc := add(sc, 1)\n                } lt(mc, end) {\n                    sc := add(sc, 1)\n                    mc := add(mc, 0x20)\n                } {\n                    sstore(sc, mload(mc))\n                }\n\n                mask := exp(0x100, sub(mc, end))\n\n                sstore(sc, mul(div(mload(mc), mask), mask))\n            }\n            default {\n                // get the keccak hash to get the contents of the array\n                mstore(0x0, _preBytes_slot)\n                // Start copying to the last used word of the stored array.\n                let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n\n                // save new length\n                sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n\n                // Copy over the first `submod` bytes of the new data as in\n                // case 1 above.\n                let slengthmod := mod(slength, 32)\n                let mlengthmod := mod(mlength, 32)\n                let submod := sub(32, slengthmod)\n                let mc := add(_postBytes, submod)\n                let end := add(_postBytes, mlength)\n                let mask := sub(exp(0x100, submod), 1)\n\n                sstore(sc, add(sload(sc), and(mload(mc), mask)))\n\n                for {\n                    sc := add(sc, 1)\n                    mc := add(mc, 0x20)\n                } lt(mc, end) {\n                    sc := add(sc, 1)\n                    mc := add(mc, 0x20)\n                } {\n                    sstore(sc, mload(mc))\n                }\n\n                mask := exp(0x100, sub(mc, end))\n\n                sstore(sc, mul(div(mload(mc), mask), mask))\n            }\n        }\n    }\n\n    function slice(bytes memory _bytes, uint _start, uint _length) internal  pure returns (bytes memory res) {\n        if (_length == 0) {\n            return hex\"\";\n        }\n        uint _end = _start + _length;\n        require(_end > _start && _bytes.length >= _end, \"Slice out of bounds\");\n\n        assembly {\n            // Alloc bytes array with additional 32 bytes afterspace and assign it's size\n            res := mload(0x40)\n            mstore(0x40, add(add(res, 64), _length))\n            mstore(res, _length)\n\n            // Compute distance between source and destination pointers\n            let diff := sub(res, add(_bytes, _start))\n\n            for {\n                let src := add(add(_bytes, 32), _start)\n                let end := add(src, _length)\n            } lt(src, end) {\n                src := add(src, 32)\n            } {\n                mstore(add(src, diff), mload(src))\n            }\n        }\n    }\n\n    function toAddress(bytes memory _bytes, uint _start) internal  pure returns (address) {\n        uint _totalLen = _start + 20;\n        require(_totalLen > _start && _bytes.length >= _totalLen, \"Address conversion out of bounds.\");\n        address tempAddress;\n\n        assembly {\n            tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n        }\n\n        return tempAddress;\n    }\n\n    function toUint(bytes memory _bytes, uint _start) internal  pure returns (uint256) {\n        uint _totalLen = _start + 32;\n        require(_totalLen > _start && _bytes.length >= _totalLen, \"Uint conversion out of bounds.\");\n        uint256 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x20), _start))\n        }\n\n        return tempUint;\n    }\n\n    function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) {\n        bool success = true;\n\n        assembly {\n            let length := mload(_preBytes)\n\n            // if lengths don't match the arrays are not equal\n            switch eq(length, mload(_postBytes))\n            case 1 {\n                // cb is a circuit breaker in the for loop since there's\n                //  no said feature for inline assembly loops\n                // cb = 1 - don't breaker\n                // cb = 0 - break\n                let cb := 1\n\n                let mc := add(_preBytes, 0x20)\n                let end := add(mc, length)\n\n                for {\n                    let cc := add(_postBytes, 0x20)\n                    // the next line is the loop condition:\n                    // while(uint(mc < end) + cb == 2)\n                } eq(add(lt(mc, end), cb), 2) {\n                    mc := add(mc, 0x20)\n                    cc := add(cc, 0x20)\n                } {\n                    // if any of these checks fails then arrays are not equal\n                    if iszero(eq(mload(mc), mload(cc))) {\n                        // unsuccess:\n                        success := 0\n                        cb := 0\n                    }\n                }\n            }\n            default {\n                // unsuccess:\n                success := 0\n            }\n        }\n\n        return success;\n    }\n\n    function equalStorage(bytes storage _preBytes, bytes memory _postBytes) internal view returns (bool) {\n        bool success = true;\n\n        assembly {\n            // we know _preBytes_offset is 0\n            let fslot := sload(_preBytes_slot)\n            // Decode the length of the stored array like in concatStorage().\n            let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n            let mlength := mload(_postBytes)\n\n            // if lengths don't match the arrays are not equal\n            switch eq(slength, mlength)\n            case 1 {\n                // slength can contain both the length and contents of the array\n                // if length < 32 bytes so let's prepare for that\n                // v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage\n                if iszero(iszero(slength)) {\n                    switch lt(slength, 32)\n                    case 1 {\n                        // blank the last byte which is the length\n                        fslot := mul(div(fslot, 0x100), 0x100)\n\n                        if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) {\n                            // unsuccess:\n                            success := 0\n                        }\n                    }\n                    default {\n                        // cb is a circuit breaker in the for loop since there's\n                        //  no said feature for inline assembly loops\n                        // cb = 1 - don't breaker\n                        // cb = 0 - break\n                        let cb := 1\n\n                        // get the keccak hash to get the contents of the array\n                        mstore(0x0, _preBytes_slot)\n                        let sc := keccak256(0x0, 0x20)\n\n                        let mc := add(_postBytes, 0x20)\n                        let end := add(mc, mlength)\n\n                        // the next line is the loop condition:\n                        // while(uint(mc < end) + cb == 2)\n                        for {} eq(add(lt(mc, end), cb), 2) {\n                            sc := add(sc, 1)\n                            mc := add(mc, 0x20)\n                        } {\n                            if iszero(eq(sload(sc), mload(mc))) {\n                                // unsuccess:\n                                success := 0\n                                cb := 0\n                            }\n                        }\n                    }\n                }\n            }\n            default {\n                // unsuccess:\n                success := 0\n            }\n        }\n\n        return success;\n    }\n\n    function toBytes32(bytes memory _source) pure internal returns (bytes32 result) {\n        if (_source.length == 0) {\n            return 0x0;\n        }\n\n        assembly {\n            result := mload(add(_source, 32))\n        }\n    }\n\n    function keccak256Slice(bytes memory _bytes, uint _start, uint _length) pure internal returns (bytes32 result) {\n        uint _end = _start + _length;\n        require(_end > _start && _bytes.length >= _end, \"Slice out of bounds\");\n\n        assembly {\n            result := keccak256(add(add(_bytes, 32), _start), _length)\n        }\n    }\n}\n",
  "sourcePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
  "ast": {
    "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
    "exportedSymbols": {
      "BytesLib": [
        13432
      ]
    },
    "id": 13433,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13218,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".10"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:49"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@author https://github.com/GNSPS *",
        "fullyImplemented": true,
        "id": 13432,
        "linearizedBaseContracts": [
          13432
        ],
        "name": "BytesLib",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 13233,
              "nodeType": "Block",
              "src": "1485:2807:49",
              "statements": [
                {
                  "assignments": [
                    13228
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13228,
                      "name": "tempBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 13233,
                      "src": "1495:22:49",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 13227,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1495:5:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13229,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1495:22:49"
                },
                {
                  "externalReferences": [
                    {
                      "tempBytes": {
                        "declaration": 13228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1681:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 13220,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1857:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 13228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2129:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 13228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1887:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 13220,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2472:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3470:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3052:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 13228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3083:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 13228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3112:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 13220,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4152:9:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13230,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempBytes := mload(0x40)\n    let length := mload(_preBytes)\n    mstore(tempBytes, length)\n    let mc := add(tempBytes, 0x20)\n    let end := add(mc, length)\n    for {\n        let cc := add(_preBytes, 0x20)\n    }\n    lt(mc, end)\n    {\n        mc := add(mc, 0x20)\n        cc := add(cc, 0x20)\n    }\n    { mstore(mc, mload(cc)) }\n    length := mload(_postBytes)\n    mstore(tempBytes, add(length, mload(tempBytes)))\n    mc := end\n    end := add(mc, length)\n    for {\n        let cc := add(_postBytes, 0x20)\n    }\n    lt(mc, end)\n    {\n        mc := add(mc, 0x20)\n        cc := add(cc, 0x20)\n    }\n    { mstore(mc, mload(cc)) }\n    mstore(0x40, and(add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31)))\n}",
                  "src": "1528:2731:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13231,
                    "name": "tempBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13228,
                    "src": "4276:9:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 13226,
                  "id": 13232,
                  "nodeType": "Return",
                  "src": "4269:16:49"
                }
              ]
            },
            "documentation": null,
            "id": 13234,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13220,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13234,
                  "src": "1399:22:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13219,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1399:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13222,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13234,
                  "src": "1423:23:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13221,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1423:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1398:49:49"
            },
            "returnParameters": {
              "id": 13226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13225,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13234,
                  "src": "1471:12:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13224,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1471:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1470:14:49"
            },
            "scope": 13432,
            "src": "1383:2909:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13242,
              "nodeType": "Block",
              "src": "4380:5959:49",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "4641:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5259:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "5935:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8161:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "7325:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "6465:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8212:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "7470:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "9161:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9717:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13236,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "9382:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13238,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9768:10:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13241,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let fslot := sload(_preBytes_slot)\n    let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n    let mlength := mload(_postBytes)\n    let newlength := add(slength, mlength)\n    switch add(lt(slength, 32), lt(newlength, 32))\n    case 2 {\n        sstore(_preBytes_slot, add(fslot, add(mul(div(mload(add(_postBytes, 0x20)), exp(0x100, sub(32, mlength))), exp(0x100, sub(32, newlength))), mul(mlength, 2))))\n    }\n    case 1 {\n        mstore(0x0, _preBytes_slot)\n        let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n        sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n        let submod := sub(32, slength)\n        let mc := add(_postBytes, submod)\n        let end := add(_postBytes, mlength)\n        let mask := sub(exp(0x100, submod), 1)\n        sstore(sc, add(and(fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00), and(mload(mc), mask)))\n        for {\n            mc := add(mc, 0x20)\n            sc := add(sc, 1)\n        }\n        lt(mc, end)\n        {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        { sstore(sc, mload(mc)) }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n    default {\n        mstore(0x0, _preBytes_slot)\n        let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n        sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n        let slengthmod := mod(slength, 32)\n        let mlengthmod := mod(mlength, 32)\n        let submod := sub(32, slengthmod)\n        let mc := add(_postBytes, submod)\n        let end := add(_postBytes, mlength)\n        let mask := sub(exp(0x100, submod), 1)\n        sstore(sc, add(sload(sc), and(mload(mc), mask)))\n        for {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        lt(mc, end)\n        {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        { sstore(sc, mload(mc)) }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n}",
                  "src": "4390:5943:49"
                }
              ]
            },
            "documentation": null,
            "id": 13243,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concatStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13236,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13243,
                  "src": "4321:23:49",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13235,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4321:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13238,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13243,
                  "src": "4346:23:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13237,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4346:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4320:50:49"
            },
            "returnParameters": {
              "id": 13240,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4380:0:49"
            },
            "scope": 13432,
            "src": "4298:6041:49",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13280,
              "nodeType": "Block",
              "src": "10450:819:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13254,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13249,
                      "src": "10464:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10475:1:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10464:12:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13260,
                  "nodeType": "IfStatement",
                  "src": "10460:55:49",
                  "trueBody": {
                    "id": 13259,
                    "nodeType": "Block",
                    "src": "10478:37:49",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "",
                          "id": 13257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10499:5:49",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        },
                        "functionReturnParameters": 13253,
                        "id": 13258,
                        "nodeType": "Return",
                        "src": "10492:12:49"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    13262
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13262,
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 13280,
                      "src": "10524:9:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13261,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10524:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13266,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13263,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13247,
                      "src": "10536:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13264,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13249,
                      "src": "10545:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10536:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10524:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13268,
                            "name": "_end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13262,
                            "src": "10570:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13269,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13247,
                            "src": "10577:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10570:13:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13271,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13245,
                              "src": "10587:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 13272,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10587:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13273,
                            "name": "_end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13262,
                            "src": "10604:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10587:21:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10570:38:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536c696365206f7574206f6620626f756e6473",
                        "id": 13276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10610:21:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                          "typeString": "literal_string \"Slice out of bounds\""
                        },
                        "value": "Slice out of bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                          "typeString": "literal_string \"Slice out of bounds\""
                        }
                      ],
                      "id": 13267,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "10562:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10562:70:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13278,
                  "nodeType": "ExpressionStatement",
                  "src": "10562:70:49"
                },
                {
                  "externalReferences": [
                    {
                      "_bytes": {
                        "declaration": 13245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10971:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 13247,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10979:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "res": {
                        "declaration": 13252,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10962:3:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 13249,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10818:7:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "res": {
                        "declaration": 13252,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10808:3:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "res": {
                        "declaration": 13252,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10847:3:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 13249,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10852:7:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "res": {
                        "declaration": 13252,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10756:3:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 13245,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11042:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 13247,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11055:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 13249,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11099:7:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13279,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    res := mload(0x40)\n    mstore(0x40, add(add(res, 64), _length))\n    mstore(res, _length)\n    let diff := sub(res, add(_bytes, _start))\n    for {\n        let src := add(add(_bytes, 32), _start)\n        let end := add(src, _length)\n    }\n    lt(src, end)\n    { src := add(src, 32) }\n    {\n        mstore(add(src, diff), mload(src))\n    }\n}",
                  "src": "10643:620:49"
                }
              ]
            },
            "documentation": null,
            "id": 13281,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "slice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13245,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13281,
                  "src": "10360:19:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13244,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10360:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13247,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 13281,
                  "src": "10381:11:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13246,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10381:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13249,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 13281,
                  "src": "10394:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13248,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10394:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10359:48:49"
            },
            "returnParameters": {
              "id": 13253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13252,
                  "name": "res",
                  "nodeType": "VariableDeclaration",
                  "scope": 13281,
                  "src": "10432:16:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13251,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10432:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10431:18:49"
            },
            "scope": 13432,
            "src": "10345:924:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13314,
              "nodeType": "Block",
              "src": "11361:336:49",
              "statements": [
                {
                  "assignments": [
                    13291
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13291,
                      "name": "_totalLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 13314,
                      "src": "11371:14:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13290,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11371:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13295,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13292,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13285,
                      "src": "11388:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3230",
                      "id": 13293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11397:2:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_20_by_1",
                        "typeString": "int_const 20"
                      },
                      "value": "20"
                    },
                    "src": "11388:11:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11371:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13297,
                            "name": "_totalLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13291,
                            "src": "11417:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13298,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13285,
                            "src": "11429:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11417:18:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13300,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13283,
                              "src": "11439:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 13301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11439:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13302,
                            "name": "_totalLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13291,
                            "src": "11456:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11439:26:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11417:48:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e",
                        "id": 13305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11467:35:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3181add2f98e784f646c1ef936b3a8c6a87d5ec668aceb489a343dc808291b79",
                          "typeString": "literal_string \"Address conversion out of bounds.\""
                        },
                        "value": "Address conversion out of bounds."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3181add2f98e784f646c1ef936b3a8c6a87d5ec668aceb489a343dc808291b79",
                          "typeString": "literal_string \"Address conversion out of bounds.\""
                        }
                      ],
                      "id": 13296,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11409:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11409:94:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13307,
                  "nodeType": "ExpressionStatement",
                  "src": "11409:94:49"
                },
                {
                  "assignments": [
                    13309
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13309,
                      "name": "tempAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 13314,
                      "src": "11513:19:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 13308,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "11513:7:49",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13310,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11513:19:49"
                },
                {
                  "externalReferences": [
                    {
                      "tempAddress": {
                        "declaration": 13309,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11566:11:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 13283,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11599:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 13285,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11614:6:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13311,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n}",
                  "src": "11543:119:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13312,
                    "name": "tempAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13309,
                    "src": "11679:11:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13289,
                  "id": 13313,
                  "nodeType": "Return",
                  "src": "11672:18:49"
                }
              ]
            },
            "documentation": null,
            "id": 13315,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13283,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13315,
                  "src": "11294:19:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13282,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11294:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13285,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 13315,
                  "src": "11315:11:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13284,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11315:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11293:34:49"
            },
            "returnParameters": {
              "id": 13289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13288,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13315,
                  "src": "11352:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11352:7:49",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11351:9:49"
            },
            "scope": 13432,
            "src": "11275:422:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13348,
              "nodeType": "Block",
              "src": "11786:290:49",
              "statements": [
                {
                  "assignments": [
                    13325
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13325,
                      "name": "_totalLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 13348,
                      "src": "11796:14:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13324,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11796:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13329,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13326,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13319,
                      "src": "11813:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3332",
                      "id": 13327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11822:2:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "11813:11:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11796:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13331,
                            "name": "_totalLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13325,
                            "src": "11842:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13332,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13319,
                            "src": "11854:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11842:18:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13334,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13317,
                              "src": "11864:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 13335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "11864:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13336,
                            "name": "_totalLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13325,
                            "src": "11881:9:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11864:26:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11842:48:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "55696e7420636f6e76657273696f6e206f7574206f6620626f756e64732e",
                        "id": 13339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11892:32:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8a652cf2416458d88f5f21292c53d59bfaf053b0555363202b6264b9a63dface",
                          "typeString": "literal_string \"Uint conversion out of bounds.\""
                        },
                        "value": "Uint conversion out of bounds."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8a652cf2416458d88f5f21292c53d59bfaf053b0555363202b6264b9a63dface",
                          "typeString": "literal_string \"Uint conversion out of bounds.\""
                        }
                      ],
                      "id": 13330,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "11834:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11834:91:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13341,
                  "nodeType": "ExpressionStatement",
                  "src": "11834:91:49"
                },
                {
                  "assignments": [
                    13343
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13343,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 13348,
                      "src": "11935:16:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13342,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11935:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13344,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11935:16:49"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 13343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11985:8:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 13317,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12011:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 13319,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12026:6:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13345,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x20), _start))\n}",
                  "src": "11962:82:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13346,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13343,
                    "src": "12061:8:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13323,
                  "id": 13347,
                  "nodeType": "Return",
                  "src": "12054:15:49"
                }
              ]
            },
            "documentation": null,
            "id": 13349,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13317,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13349,
                  "src": "11719:19:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13316,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11719:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13319,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 13349,
                  "src": "11740:11:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13318,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "11740:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11718:34:49"
            },
            "returnParameters": {
              "id": 13323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13322,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13349,
                  "src": "11777:7:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13321,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11777:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11776:9:49"
            },
            "scope": 13432,
            "src": "11703:373:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13365,
              "nodeType": "Block",
              "src": "12175:1328:49",
              "statements": [
                {
                  "assignments": [
                    13359
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13359,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 13365,
                      "src": "12185:12:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13358,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12185:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13361,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "12200:4:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12185:19:49"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes": {
                        "declaration": 13351,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12258:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13353,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12369:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 13351,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12673:9:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13353,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12790:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 13359,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13269:7:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 13359,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13436:7:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13362,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let length := mload(_preBytes)\n    switch eq(length, mload(_postBytes))\n    case 1 {\n        let cb := 1\n        let mc := add(_preBytes, 0x20)\n        let end := add(mc, length)\n        for {\n            let cc := add(_postBytes, 0x20)\n        }\n        eq(add(lt(mc, end), cb), 2)\n        {\n            mc := add(mc, 0x20)\n            cc := add(cc, 0x20)\n        }\n        {\n            if iszero(eq(mload(mc), mload(cc)))\n            {\n                success := 0\n                cb := 0\n            }\n        }\n    }\n    default { success := 0 }\n}",
                  "src": "12215:1257:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13363,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13359,
                    "src": "13489:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13357,
                  "id": 13364,
                  "nodeType": "Return",
                  "src": "13482:14:49"
                }
              ]
            },
            "documentation": null,
            "id": 13366,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13351,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13366,
                  "src": "12097:22:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13350,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12097:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13353,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13366,
                  "src": "12121:23:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13352,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12121:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12096:49:49"
            },
            "returnParameters": {
              "id": 13357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13356,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13366,
                  "src": "12169:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13355,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12169:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12168:6:49"
            },
            "scope": 13432,
            "src": "12082:1421:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13382,
              "nodeType": "Block",
              "src": "13610:2556:49",
              "statements": [
                {
                  "assignments": [
                    13376
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13376,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 13382,
                      "src": "13620:12:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 13375,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13620:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13378,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 13377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13635:4:49",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13620:19:49"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 13368,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "13737:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13370,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13953:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13370,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14658:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 13376,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14751:7:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 13370,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15348:10:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 13368,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "15238:14:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 13376,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15868:7:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 13376,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16099:7:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13379,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let fslot := sload(_preBytes_slot)\n    let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n    let mlength := mload(_postBytes)\n    switch eq(slength, mlength)\n    case 1 {\n        if iszero(iszero(slength))\n        {\n            switch lt(slength, 32)\n            case 1 {\n                fslot := mul(div(fslot, 0x100), 0x100)\n                if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) { success := 0 }\n            }\n            default {\n                let cb := 1\n                mstore(0x0, _preBytes_slot)\n                let sc := keccak256(0x0, 0x20)\n                let mc := add(_postBytes, 0x20)\n                let end := add(mc, mlength)\n                for { }\n                eq(add(lt(mc, end), cb), 2)\n                {\n                    sc := add(sc, 1)\n                    mc := add(mc, 0x20)\n                }\n                {\n                    if iszero(eq(sload(sc), mload(mc)))\n                    {\n                        success := 0\n                        cb := 0\n                    }\n                }\n            }\n        }\n    }\n    default { success := 0 }\n}",
                  "src": "13650:2485:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13380,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13376,
                    "src": "16152:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13374,
                  "id": 13381,
                  "nodeType": "Return",
                  "src": "16145:14:49"
                }
              ]
            },
            "documentation": null,
            "id": 13383,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equalStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13371,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13368,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13383,
                  "src": "13531:23:49",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13367,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13531:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13370,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13383,
                  "src": "13556:23:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13369,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13556:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13530:50:49"
            },
            "returnParameters": {
              "id": 13374,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13373,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13383,
                  "src": "13604:4:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13372,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13604:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13603:6:49"
            },
            "scope": 13432,
            "src": "13509:2657:49",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13399,
              "nodeType": "Block",
              "src": "16252:152:49",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13393,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 13390,
                        "name": "_source",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13385,
                        "src": "16266:7:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 13391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16266:14:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16284:1:49",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16266:19:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13397,
                  "nodeType": "IfStatement",
                  "src": "16262:60:49",
                  "trueBody": {
                    "id": 13396,
                    "nodeType": "Block",
                    "src": "16287:35:49",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 13394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16308:3:49",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        },
                        "functionReturnParameters": 13389,
                        "id": 13395,
                        "nodeType": "Return",
                        "src": "16301:10:49"
                      }
                    ]
                  }
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 13388,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16355:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_source": {
                        "declaration": 13385,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16375:7:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13398,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := mload(add(_source, 32))\n}",
                  "src": "16332:66:49"
                }
              ]
            },
            "documentation": null,
            "id": 13400,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13386,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13385,
                  "name": "_source",
                  "nodeType": "VariableDeclaration",
                  "scope": 13400,
                  "src": "16191:20:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13384,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16191:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16190:22:49"
            },
            "returnParameters": {
              "id": 13389,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13388,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 13400,
                  "src": "16236:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13387,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16236:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16235:16:49"
            },
            "scope": 13432,
            "src": "16172:232:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13430,
              "nodeType": "Block",
              "src": "16521:226:49",
              "statements": [
                {
                  "assignments": [
                    13412
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13412,
                      "name": "_end",
                      "nodeType": "VariableDeclaration",
                      "scope": 13430,
                      "src": "16531:9:49",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13411,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16531:4:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13416,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13413,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13404,
                      "src": "16543:6:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13414,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13406,
                      "src": "16552:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16543:16:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16531:28:49"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13418,
                            "name": "_end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13412,
                            "src": "16577:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13419,
                            "name": "_start",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13404,
                            "src": "16584:6:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16577:13:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13421,
                              "name": "_bytes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13402,
                              "src": "16594:6:49",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 13422,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16594:13:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13423,
                            "name": "_end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13412,
                            "src": "16611:4:49",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "16594:21:49",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "16577:38:49",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "536c696365206f7574206f6620626f756e6473",
                        "id": 13426,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16617:21:49",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                          "typeString": "literal_string \"Slice out of bounds\""
                        },
                        "value": "Slice out of bounds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                          "typeString": "literal_string \"Slice out of bounds\""
                        }
                      ],
                      "id": 13417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        18363,
                        18364
                      ],
                      "referencedDeclaration": 18364,
                      "src": "16569:7:49",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13427,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16569:70:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13428,
                  "nodeType": "ExpressionStatement",
                  "src": "16569:70:49"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 13409,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16673:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 13402,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16701:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 13404,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16714:6:49",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 13406,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16723:7:49",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 13429,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := keccak256(add(add(_bytes, 32), _start), _length)\n}",
                  "src": "16650:91:49"
                }
              ]
            },
            "documentation": null,
            "id": 13431,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak256Slice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13402,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 13431,
                  "src": "16434:19:49",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13401,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16434:5:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13404,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 13431,
                  "src": "16455:11:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13403,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16455:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13406,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 13431,
                  "src": "16468:12:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13405,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16468:4:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16433:48:49"
            },
            "returnParameters": {
              "id": 13410,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13409,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 13431,
                  "src": "16505:14:49",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 13408,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16505:7:49",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16504:16:49"
            },
            "scope": 13432,
            "src": "16410:337:49",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 13433,
        "src": "1360:15389:49"
      }
    ],
    "src": "0:16750:49"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@summa-tx/bitcoin-spv-sol/contracts/BytesLib.sol",
      "exportedSymbols": {
        "BytesLib": [
          13432
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.5",
            ".10"
          ]
        },
        "id": 13218,
        "name": "PragmaDirective",
        "src": "0:24:49"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": "@author https://github.com/GNSPS *",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            13432
          ],
          "name": "BytesLib",
          "scope": 13433
        },
        "children": [
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "concat",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preBytes",
                      "scope": 13234,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13219,
                        "name": "ElementaryTypeName",
                        "src": "1399:5:49"
                      }
                    ],
                    "id": 13220,
                    "name": "VariableDeclaration",
                    "src": "1399:22:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_postBytes",
                      "scope": 13234,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13221,
                        "name": "ElementaryTypeName",
                        "src": "1423:5:49"
                      }
                    ],
                    "id": 13222,
                    "name": "VariableDeclaration",
                    "src": "1423:23:49"
                  }
                ],
                "id": 13223,
                "name": "ParameterList",
                "src": "1398:49:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13234,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13224,
                        "name": "ElementaryTypeName",
                        "src": "1471:5:49"
                      }
                    ],
                    "id": 13225,
                    "name": "VariableDeclaration",
                    "src": "1471:12:49"
                  }
                ],
                "id": 13226,
                "name": "ParameterList",
                "src": "1470:14:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13228
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tempBytes",
                          "scope": 13233,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 13227,
                            "name": "ElementaryTypeName",
                            "src": "1495:5:49"
                          }
                        ],
                        "id": 13228,
                        "name": "VariableDeclaration",
                        "src": "1495:22:49"
                      }
                    ],
                    "id": 13229,
                    "name": "VariableDeclarationStatement",
                    "src": "1495:22:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "tempBytes": {
                            "declaration": 13228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1681:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes": {
                            "declaration": 13220,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1857:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "tempBytes": {
                            "declaration": 13228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2129:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "tempBytes": {
                            "declaration": 13228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1887:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes": {
                            "declaration": 13220,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2472:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13222,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3470:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13222,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3052:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "tempBytes": {
                            "declaration": 13228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3083:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "tempBytes": {
                            "declaration": 13228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3112:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes": {
                            "declaration": 13220,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4152:9:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    tempBytes := mload(0x40)\n    let length := mload(_preBytes)\n    mstore(tempBytes, length)\n    let mc := add(tempBytes, 0x20)\n    let end := add(mc, length)\n    for {\n        let cc := add(_preBytes, 0x20)\n    }\n    lt(mc, end)\n    {\n        mc := add(mc, 0x20)\n        cc := add(cc, 0x20)\n    }\n    { mstore(mc, mload(cc)) }\n    length := mload(_postBytes)\n    mstore(tempBytes, add(length, mload(tempBytes)))\n    mc := end\n    end := add(mc, length)\n    for {\n        let cc := add(_postBytes, 0x20)\n    }\n    lt(mc, end)\n    {\n        mc := add(mc, 0x20)\n        cc := add(cc, 0x20)\n    }\n    { mstore(mc, mload(cc)) }\n    mstore(0x40, and(add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31)))\n}"
                    },
                    "children": [],
                    "id": 13230,
                    "name": "InlineAssembly",
                    "src": "1528:2731:49"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13226
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13228,
                          "type": "bytes memory",
                          "value": "tempBytes"
                        },
                        "id": 13231,
                        "name": "Identifier",
                        "src": "4276:9:49"
                      }
                    ],
                    "id": 13232,
                    "name": "Return",
                    "src": "4269:16:49"
                  }
                ],
                "id": 13233,
                "name": "Block",
                "src": "1485:2807:49"
              }
            ],
            "id": 13234,
            "name": "FunctionDefinition",
            "src": "1383:2909:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "concatStorage",
              "scope": 13432,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preBytes",
                      "scope": 13243,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13235,
                        "name": "ElementaryTypeName",
                        "src": "4321:5:49"
                      }
                    ],
                    "id": 13236,
                    "name": "VariableDeclaration",
                    "src": "4321:23:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_postBytes",
                      "scope": 13243,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13237,
                        "name": "ElementaryTypeName",
                        "src": "4346:5:49"
                      }
                    ],
                    "id": 13238,
                    "name": "VariableDeclaration",
                    "src": "4346:23:49"
                  }
                ],
                "id": 13239,
                "name": "ParameterList",
                "src": "4320:50:49"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 13240,
                "name": "ParameterList",
                "src": "4380:0:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "4641:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5259:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "5935:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8161:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "7325:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6465:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8212:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "7470:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "9161:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9717:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13236,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "9382:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13238,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9768:10:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    let fslot := sload(_preBytes_slot)\n    let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n    let mlength := mload(_postBytes)\n    let newlength := add(slength, mlength)\n    switch add(lt(slength, 32), lt(newlength, 32))\n    case 2 {\n        sstore(_preBytes_slot, add(fslot, add(mul(div(mload(add(_postBytes, 0x20)), exp(0x100, sub(32, mlength))), exp(0x100, sub(32, newlength))), mul(mlength, 2))))\n    }\n    case 1 {\n        mstore(0x0, _preBytes_slot)\n        let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n        sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n        let submod := sub(32, slength)\n        let mc := add(_postBytes, submod)\n        let end := add(_postBytes, mlength)\n        let mask := sub(exp(0x100, submod), 1)\n        sstore(sc, add(and(fslot, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00), and(mload(mc), mask)))\n        for {\n            mc := add(mc, 0x20)\n            sc := add(sc, 1)\n        }\n        lt(mc, end)\n        {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        { sstore(sc, mload(mc)) }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n    default {\n        mstore(0x0, _preBytes_slot)\n        let sc := add(keccak256(0x0, 0x20), div(slength, 32))\n        sstore(_preBytes_slot, add(mul(newlength, 2), 1))\n        let slengthmod := mod(slength, 32)\n        let mlengthmod := mod(mlength, 32)\n        let submod := sub(32, slengthmod)\n        let mc := add(_postBytes, submod)\n        let end := add(_postBytes, mlength)\n        let mask := sub(exp(0x100, submod), 1)\n        sstore(sc, add(sload(sc), and(mload(mc), mask)))\n        for {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        lt(mc, end)\n        {\n            sc := add(sc, 1)\n            mc := add(mc, 0x20)\n        }\n        { sstore(sc, mload(mc)) }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n}"
                    },
                    "children": [],
                    "id": 13241,
                    "name": "InlineAssembly",
                    "src": "4390:5943:49"
                  }
                ],
                "id": 13242,
                "name": "Block",
                "src": "4380:5959:49"
              }
            ],
            "id": 13243,
            "name": "FunctionDefinition",
            "src": "4298:6041:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "slice",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bytes",
                      "scope": 13281,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13244,
                        "name": "ElementaryTypeName",
                        "src": "10360:5:49"
                      }
                    ],
                    "id": 13245,
                    "name": "VariableDeclaration",
                    "src": "10360:19:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_start",
                      "scope": 13281,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13246,
                        "name": "ElementaryTypeName",
                        "src": "10381:4:49"
                      }
                    ],
                    "id": 13247,
                    "name": "VariableDeclaration",
                    "src": "10381:11:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_length",
                      "scope": 13281,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13248,
                        "name": "ElementaryTypeName",
                        "src": "10394:4:49"
                      }
                    ],
                    "id": 13249,
                    "name": "VariableDeclaration",
                    "src": "10394:12:49"
                  }
                ],
                "id": 13250,
                "name": "ParameterList",
                "src": "10359:48:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "res",
                      "scope": 13281,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13251,
                        "name": "ElementaryTypeName",
                        "src": "10432:5:49"
                      }
                    ],
                    "id": 13252,
                    "name": "VariableDeclaration",
                    "src": "10432:16:49"
                  }
                ],
                "id": 13253,
                "name": "ParameterList",
                "src": "10431:18:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13249,
                              "type": "uint256",
                              "value": "_length"
                            },
                            "id": 13254,
                            "name": "Identifier",
                            "src": "10464:7:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 13255,
                            "name": "Literal",
                            "src": "10475:1:49"
                          }
                        ],
                        "id": 13256,
                        "name": "BinaryOperation",
                        "src": "10464:12:49"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 13253
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "string",
                                  "type": "literal_string \"\"",
                                  "value": ""
                                },
                                "id": 13257,
                                "name": "Literal",
                                "src": "10499:5:49"
                              }
                            ],
                            "id": 13258,
                            "name": "Return",
                            "src": "10492:12:49"
                          }
                        ],
                        "id": 13259,
                        "name": "Block",
                        "src": "10478:37:49"
                      }
                    ],
                    "id": 13260,
                    "name": "IfStatement",
                    "src": "10460:55:49"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13262
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_end",
                          "scope": 13280,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 13261,
                            "name": "ElementaryTypeName",
                            "src": "10524:4:49"
                          }
                        ],
                        "id": 13262,
                        "name": "VariableDeclaration",
                        "src": "10524:9:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13247,
                              "type": "uint256",
                              "value": "_start"
                            },
                            "id": 13263,
                            "name": "Identifier",
                            "src": "10536:6:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13249,
                              "type": "uint256",
                              "value": "_length"
                            },
                            "id": 13264,
                            "name": "Identifier",
                            "src": "10545:7:49"
                          }
                        ],
                        "id": 13265,
                        "name": "BinaryOperation",
                        "src": "10536:16:49"
                      }
                    ],
                    "id": 13266,
                    "name": "VariableDeclarationStatement",
                    "src": "10524:28:49"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                                  "typeString": "literal_string \"Slice out of bounds\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13267,
                            "name": "Identifier",
                            "src": "10562:7:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13262,
                                      "type": "uint256",
                                      "value": "_end"
                                    },
                                    "id": 13268,
                                    "name": "Identifier",
                                    "src": "10570:4:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13247,
                                      "type": "uint256",
                                      "value": "_start"
                                    },
                                    "id": 13269,
                                    "name": "Identifier",
                                    "src": "10577:6:49"
                                  }
                                ],
                                "id": 13270,
                                "name": "BinaryOperation",
                                "src": "10570:13:49"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13245,
                                          "type": "bytes memory",
                                          "value": "_bytes"
                                        },
                                        "id": 13271,
                                        "name": "Identifier",
                                        "src": "10587:6:49"
                                      }
                                    ],
                                    "id": 13272,
                                    "name": "MemberAccess",
                                    "src": "10587:13:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13262,
                                      "type": "uint256",
                                      "value": "_end"
                                    },
                                    "id": 13273,
                                    "name": "Identifier",
                                    "src": "10604:4:49"
                                  }
                                ],
                                "id": 13274,
                                "name": "BinaryOperation",
                                "src": "10587:21:49"
                              }
                            ],
                            "id": 13275,
                            "name": "BinaryOperation",
                            "src": "10570:38:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "536c696365206f7574206f6620626f756e6473",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Slice out of bounds\"",
                              "value": "Slice out of bounds"
                            },
                            "id": 13276,
                            "name": "Literal",
                            "src": "10610:21:49"
                          }
                        ],
                        "id": 13277,
                        "name": "FunctionCall",
                        "src": "10562:70:49"
                      }
                    ],
                    "id": 13278,
                    "name": "ExpressionStatement",
                    "src": "10562:70:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "_bytes": {
                            "declaration": 13245,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10971:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_start": {
                            "declaration": 13247,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10979:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "res": {
                            "declaration": 13252,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10962:3:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_length": {
                            "declaration": 13249,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10818:7:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "res": {
                            "declaration": 13252,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10808:3:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "res": {
                            "declaration": 13252,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10847:3:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_length": {
                            "declaration": 13249,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10852:7:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "res": {
                            "declaration": 13252,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "10756:3:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_bytes": {
                            "declaration": 13245,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11042:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_start": {
                            "declaration": 13247,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11055:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_length": {
                            "declaration": 13249,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11099:7:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    res := mload(0x40)\n    mstore(0x40, add(add(res, 64), _length))\n    mstore(res, _length)\n    let diff := sub(res, add(_bytes, _start))\n    for {\n        let src := add(add(_bytes, 32), _start)\n        let end := add(src, _length)\n    }\n    lt(src, end)\n    { src := add(src, 32) }\n    {\n        mstore(add(src, diff), mload(src))\n    }\n}"
                    },
                    "children": [],
                    "id": 13279,
                    "name": "InlineAssembly",
                    "src": "10643:620:49"
                  }
                ],
                "id": 13280,
                "name": "Block",
                "src": "10450:819:49"
              }
            ],
            "id": 13281,
            "name": "FunctionDefinition",
            "src": "10345:924:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "toAddress",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bytes",
                      "scope": 13315,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13282,
                        "name": "ElementaryTypeName",
                        "src": "11294:5:49"
                      }
                    ],
                    "id": 13283,
                    "name": "VariableDeclaration",
                    "src": "11294:19:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_start",
                      "scope": 13315,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13284,
                        "name": "ElementaryTypeName",
                        "src": "11315:4:49"
                      }
                    ],
                    "id": 13285,
                    "name": "VariableDeclaration",
                    "src": "11315:11:49"
                  }
                ],
                "id": 13286,
                "name": "ParameterList",
                "src": "11293:34:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13315,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 13287,
                        "name": "ElementaryTypeName",
                        "src": "11352:7:49"
                      }
                    ],
                    "id": 13288,
                    "name": "VariableDeclaration",
                    "src": "11352:7:49"
                  }
                ],
                "id": 13289,
                "name": "ParameterList",
                "src": "11351:9:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13291
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_totalLen",
                          "scope": 13314,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 13290,
                            "name": "ElementaryTypeName",
                            "src": "11371:4:49"
                          }
                        ],
                        "id": 13291,
                        "name": "VariableDeclaration",
                        "src": "11371:14:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13285,
                              "type": "uint256",
                              "value": "_start"
                            },
                            "id": 13292,
                            "name": "Identifier",
                            "src": "11388:6:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "3230",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 20",
                              "value": "20"
                            },
                            "id": 13293,
                            "name": "Literal",
                            "src": "11397:2:49"
                          }
                        ],
                        "id": 13294,
                        "name": "BinaryOperation",
                        "src": "11388:11:49"
                      }
                    ],
                    "id": 13295,
                    "name": "VariableDeclarationStatement",
                    "src": "11371:28:49"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_3181add2f98e784f646c1ef936b3a8c6a87d5ec668aceb489a343dc808291b79",
                                  "typeString": "literal_string \"Address conversion out of bounds.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13296,
                            "name": "Identifier",
                            "src": "11409:7:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13291,
                                      "type": "uint256",
                                      "value": "_totalLen"
                                    },
                                    "id": 13297,
                                    "name": "Identifier",
                                    "src": "11417:9:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13285,
                                      "type": "uint256",
                                      "value": "_start"
                                    },
                                    "id": 13298,
                                    "name": "Identifier",
                                    "src": "11429:6:49"
                                  }
                                ],
                                "id": 13299,
                                "name": "BinaryOperation",
                                "src": "11417:18:49"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13283,
                                          "type": "bytes memory",
                                          "value": "_bytes"
                                        },
                                        "id": 13300,
                                        "name": "Identifier",
                                        "src": "11439:6:49"
                                      }
                                    ],
                                    "id": 13301,
                                    "name": "MemberAccess",
                                    "src": "11439:13:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13291,
                                      "type": "uint256",
                                      "value": "_totalLen"
                                    },
                                    "id": 13302,
                                    "name": "Identifier",
                                    "src": "11456:9:49"
                                  }
                                ],
                                "id": 13303,
                                "name": "BinaryOperation",
                                "src": "11439:26:49"
                              }
                            ],
                            "id": 13304,
                            "name": "BinaryOperation",
                            "src": "11417:48:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4164647265737320636f6e76657273696f6e206f7574206f6620626f756e64732e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Address conversion out of bounds.\"",
                              "value": "Address conversion out of bounds."
                            },
                            "id": 13305,
                            "name": "Literal",
                            "src": "11467:35:49"
                          }
                        ],
                        "id": 13306,
                        "name": "FunctionCall",
                        "src": "11409:94:49"
                      }
                    ],
                    "id": 13307,
                    "name": "ExpressionStatement",
                    "src": "11409:94:49"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13309
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tempAddress",
                          "scope": 13314,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 13308,
                            "name": "ElementaryTypeName",
                            "src": "11513:7:49"
                          }
                        ],
                        "id": 13309,
                        "name": "VariableDeclaration",
                        "src": "11513:19:49"
                      }
                    ],
                    "id": 13310,
                    "name": "VariableDeclarationStatement",
                    "src": "11513:19:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "tempAddress": {
                            "declaration": 13309,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11566:11:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_bytes": {
                            "declaration": 13283,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11599:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_start": {
                            "declaration": 13285,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11614:6:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n}"
                    },
                    "children": [],
                    "id": 13311,
                    "name": "InlineAssembly",
                    "src": "11543:119:49"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13289
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13309,
                          "type": "address",
                          "value": "tempAddress"
                        },
                        "id": 13312,
                        "name": "Identifier",
                        "src": "11679:11:49"
                      }
                    ],
                    "id": 13313,
                    "name": "Return",
                    "src": "11672:18:49"
                  }
                ],
                "id": 13314,
                "name": "Block",
                "src": "11361:336:49"
              }
            ],
            "id": 13315,
            "name": "FunctionDefinition",
            "src": "11275:422:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "toUint",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bytes",
                      "scope": 13349,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13316,
                        "name": "ElementaryTypeName",
                        "src": "11719:5:49"
                      }
                    ],
                    "id": 13317,
                    "name": "VariableDeclaration",
                    "src": "11719:19:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_start",
                      "scope": 13349,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13318,
                        "name": "ElementaryTypeName",
                        "src": "11740:4:49"
                      }
                    ],
                    "id": 13319,
                    "name": "VariableDeclaration",
                    "src": "11740:11:49"
                  }
                ],
                "id": 13320,
                "name": "ParameterList",
                "src": "11718:34:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13349,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 13321,
                        "name": "ElementaryTypeName",
                        "src": "11777:7:49"
                      }
                    ],
                    "id": 13322,
                    "name": "VariableDeclaration",
                    "src": "11777:7:49"
                  }
                ],
                "id": 13323,
                "name": "ParameterList",
                "src": "11776:9:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13325
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_totalLen",
                          "scope": 13348,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 13324,
                            "name": "ElementaryTypeName",
                            "src": "11796:4:49"
                          }
                        ],
                        "id": 13325,
                        "name": "VariableDeclaration",
                        "src": "11796:14:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13319,
                              "type": "uint256",
                              "value": "_start"
                            },
                            "id": 13326,
                            "name": "Identifier",
                            "src": "11813:6:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "3332",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 32",
                              "value": "32"
                            },
                            "id": 13327,
                            "name": "Literal",
                            "src": "11822:2:49"
                          }
                        ],
                        "id": 13328,
                        "name": "BinaryOperation",
                        "src": "11813:11:49"
                      }
                    ],
                    "id": 13329,
                    "name": "VariableDeclarationStatement",
                    "src": "11796:28:49"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8a652cf2416458d88f5f21292c53d59bfaf053b0555363202b6264b9a63dface",
                                  "typeString": "literal_string \"Uint conversion out of bounds.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13330,
                            "name": "Identifier",
                            "src": "11834:7:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13325,
                                      "type": "uint256",
                                      "value": "_totalLen"
                                    },
                                    "id": 13331,
                                    "name": "Identifier",
                                    "src": "11842:9:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13319,
                                      "type": "uint256",
                                      "value": "_start"
                                    },
                                    "id": 13332,
                                    "name": "Identifier",
                                    "src": "11854:6:49"
                                  }
                                ],
                                "id": 13333,
                                "name": "BinaryOperation",
                                "src": "11842:18:49"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13317,
                                          "type": "bytes memory",
                                          "value": "_bytes"
                                        },
                                        "id": 13334,
                                        "name": "Identifier",
                                        "src": "11864:6:49"
                                      }
                                    ],
                                    "id": 13335,
                                    "name": "MemberAccess",
                                    "src": "11864:13:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13325,
                                      "type": "uint256",
                                      "value": "_totalLen"
                                    },
                                    "id": 13336,
                                    "name": "Identifier",
                                    "src": "11881:9:49"
                                  }
                                ],
                                "id": 13337,
                                "name": "BinaryOperation",
                                "src": "11864:26:49"
                              }
                            ],
                            "id": 13338,
                            "name": "BinaryOperation",
                            "src": "11842:48:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "55696e7420636f6e76657273696f6e206f7574206f6620626f756e64732e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Uint conversion out of bounds.\"",
                              "value": "Uint conversion out of bounds."
                            },
                            "id": 13339,
                            "name": "Literal",
                            "src": "11892:32:49"
                          }
                        ],
                        "id": 13340,
                        "name": "FunctionCall",
                        "src": "11834:91:49"
                      }
                    ],
                    "id": 13341,
                    "name": "ExpressionStatement",
                    "src": "11834:91:49"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        13343
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tempUint",
                          "scope": 13348,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 13342,
                            "name": "ElementaryTypeName",
                            "src": "11935:7:49"
                          }
                        ],
                        "id": 13343,
                        "name": "VariableDeclaration",
                        "src": "11935:16:49"
                      }
                    ],
                    "id": 13344,
                    "name": "VariableDeclarationStatement",
                    "src": "11935:16:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "tempUint": {
                            "declaration": 13343,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "11985:8:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_bytes": {
                            "declaration": 13317,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12011:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_start": {
                            "declaration": 13319,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12026:6:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    tempUint := mload(add(add(_bytes, 0x20), _start))\n}"
                    },
                    "children": [],
                    "id": 13345,
                    "name": "InlineAssembly",
                    "src": "11962:82:49"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13323
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13343,
                          "type": "uint256",
                          "value": "tempUint"
                        },
                        "id": 13346,
                        "name": "Identifier",
                        "src": "12061:8:49"
                      }
                    ],
                    "id": 13347,
                    "name": "Return",
                    "src": "12054:15:49"
                  }
                ],
                "id": 13348,
                "name": "Block",
                "src": "11786:290:49"
              }
            ],
            "id": 13349,
            "name": "FunctionDefinition",
            "src": "11703:373:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equal",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preBytes",
                      "scope": 13366,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13350,
                        "name": "ElementaryTypeName",
                        "src": "12097:5:49"
                      }
                    ],
                    "id": 13351,
                    "name": "VariableDeclaration",
                    "src": "12097:22:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_postBytes",
                      "scope": 13366,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13352,
                        "name": "ElementaryTypeName",
                        "src": "12121:5:49"
                      }
                    ],
                    "id": 13353,
                    "name": "VariableDeclaration",
                    "src": "12121:23:49"
                  }
                ],
                "id": 13354,
                "name": "ParameterList",
                "src": "12096:49:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13366,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13355,
                        "name": "ElementaryTypeName",
                        "src": "12169:4:49"
                      }
                    ],
                    "id": 13356,
                    "name": "VariableDeclaration",
                    "src": "12169:4:49"
                  }
                ],
                "id": 13357,
                "name": "ParameterList",
                "src": "12168:6:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13359
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "success",
                          "scope": 13365,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 13358,
                            "name": "ElementaryTypeName",
                            "src": "12185:4:49"
                          }
                        ],
                        "id": 13359,
                        "name": "VariableDeclaration",
                        "src": "12185:12:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 13360,
                        "name": "Literal",
                        "src": "12200:4:49"
                      }
                    ],
                    "id": 13361,
                    "name": "VariableDeclarationStatement",
                    "src": "12185:19:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "_preBytes": {
                            "declaration": 13351,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12258:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13353,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12369:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes": {
                            "declaration": 13351,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12673:9:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13353,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "12790:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "success": {
                            "declaration": 13359,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13269:7:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "success": {
                            "declaration": 13359,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13436:7:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    let length := mload(_preBytes)\n    switch eq(length, mload(_postBytes))\n    case 1 {\n        let cb := 1\n        let mc := add(_preBytes, 0x20)\n        let end := add(mc, length)\n        for {\n            let cc := add(_postBytes, 0x20)\n        }\n        eq(add(lt(mc, end), cb), 2)\n        {\n            mc := add(mc, 0x20)\n            cc := add(cc, 0x20)\n        }\n        {\n            if iszero(eq(mload(mc), mload(cc)))\n            {\n                success := 0\n                cb := 0\n            }\n        }\n    }\n    default { success := 0 }\n}"
                    },
                    "children": [],
                    "id": 13362,
                    "name": "InlineAssembly",
                    "src": "12215:1257:49"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13357
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13359,
                          "type": "bool",
                          "value": "success"
                        },
                        "id": 13363,
                        "name": "Identifier",
                        "src": "13489:7:49"
                      }
                    ],
                    "id": 13364,
                    "name": "Return",
                    "src": "13482:14:49"
                  }
                ],
                "id": 13365,
                "name": "Block",
                "src": "12175:1328:49"
              }
            ],
            "id": 13366,
            "name": "FunctionDefinition",
            "src": "12082:1421:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "equalStorage",
              "scope": 13432,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_preBytes",
                      "scope": 13383,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13367,
                        "name": "ElementaryTypeName",
                        "src": "13531:5:49"
                      }
                    ],
                    "id": 13368,
                    "name": "VariableDeclaration",
                    "src": "13531:23:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_postBytes",
                      "scope": 13383,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13369,
                        "name": "ElementaryTypeName",
                        "src": "13556:5:49"
                      }
                    ],
                    "id": 13370,
                    "name": "VariableDeclaration",
                    "src": "13556:23:49"
                  }
                ],
                "id": 13371,
                "name": "ParameterList",
                "src": "13530:50:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 13383,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 13372,
                        "name": "ElementaryTypeName",
                        "src": "13604:4:49"
                      }
                    ],
                    "id": 13373,
                    "name": "VariableDeclaration",
                    "src": "13604:4:49"
                  }
                ],
                "id": 13374,
                "name": "ParameterList",
                "src": "13603:6:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13376
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "success",
                          "scope": 13382,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 13375,
                            "name": "ElementaryTypeName",
                            "src": "13620:4:49"
                          }
                        ],
                        "id": 13376,
                        "name": "VariableDeclaration",
                        "src": "13620:12:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 13377,
                        "name": "Literal",
                        "src": "13635:4:49"
                      }
                    ],
                    "id": 13378,
                    "name": "VariableDeclarationStatement",
                    "src": "13620:19:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "_preBytes_slot": {
                            "declaration": 13368,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "13737:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13370,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13953:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13370,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14658:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "success": {
                            "declaration": 13376,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14751:7:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_postBytes": {
                            "declaration": 13370,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15348:10:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_preBytes_slot": {
                            "declaration": 13368,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "15238:14:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "success": {
                            "declaration": 13376,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15868:7:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "success": {
                            "declaration": 13376,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16099:7:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    let fslot := sload(_preBytes_slot)\n    let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)\n    let mlength := mload(_postBytes)\n    switch eq(slength, mlength)\n    case 1 {\n        if iszero(iszero(slength))\n        {\n            switch lt(slength, 32)\n            case 1 {\n                fslot := mul(div(fslot, 0x100), 0x100)\n                if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) { success := 0 }\n            }\n            default {\n                let cb := 1\n                mstore(0x0, _preBytes_slot)\n                let sc := keccak256(0x0, 0x20)\n                let mc := add(_postBytes, 0x20)\n                let end := add(mc, mlength)\n                for { }\n                eq(add(lt(mc, end), cb), 2)\n                {\n                    sc := add(sc, 1)\n                    mc := add(mc, 0x20)\n                }\n                {\n                    if iszero(eq(sload(sc), mload(mc)))\n                    {\n                        success := 0\n                        cb := 0\n                    }\n                }\n            }\n        }\n    }\n    default { success := 0 }\n}"
                    },
                    "children": [],
                    "id": 13379,
                    "name": "InlineAssembly",
                    "src": "13650:2485:49"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 13374
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 13376,
                          "type": "bool",
                          "value": "success"
                        },
                        "id": 13380,
                        "name": "Identifier",
                        "src": "16152:7:49"
                      }
                    ],
                    "id": 13381,
                    "name": "Return",
                    "src": "16145:14:49"
                  }
                ],
                "id": 13382,
                "name": "Block",
                "src": "13610:2556:49"
              }
            ],
            "id": 13383,
            "name": "FunctionDefinition",
            "src": "13509:2657:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "toBytes32",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_source",
                      "scope": 13400,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13384,
                        "name": "ElementaryTypeName",
                        "src": "16191:5:49"
                      }
                    ],
                    "id": 13385,
                    "name": "VariableDeclaration",
                    "src": "16191:20:49"
                  }
                ],
                "id": 13386,
                "name": "ParameterList",
                "src": "16190:22:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "result",
                      "scope": 13400,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13387,
                        "name": "ElementaryTypeName",
                        "src": "16236:7:49"
                      }
                    ],
                    "id": 13388,
                    "name": "VariableDeclaration",
                    "src": "16236:14:49"
                  }
                ],
                "id": 13389,
                "name": "ParameterList",
                "src": "16235:16:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 13385,
                                  "type": "bytes memory",
                                  "value": "_source"
                                },
                                "id": 13390,
                                "name": "Identifier",
                                "src": "16266:7:49"
                              }
                            ],
                            "id": 13391,
                            "name": "MemberAccess",
                            "src": "16266:14:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 13392,
                            "name": "Literal",
                            "src": "16284:1:49"
                          }
                        ],
                        "id": 13393,
                        "name": "BinaryOperation",
                        "src": "16266:19:49"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 13389
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "307830",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0x0"
                                },
                                "id": 13394,
                                "name": "Literal",
                                "src": "16308:3:49"
                              }
                            ],
                            "id": 13395,
                            "name": "Return",
                            "src": "16301:10:49"
                          }
                        ],
                        "id": 13396,
                        "name": "Block",
                        "src": "16287:35:49"
                      }
                    ],
                    "id": 13397,
                    "name": "IfStatement",
                    "src": "16262:60:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "result": {
                            "declaration": 13388,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16355:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_source": {
                            "declaration": 13385,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16375:7:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    result := mload(add(_source, 32))\n}"
                    },
                    "children": [],
                    "id": 13398,
                    "name": "InlineAssembly",
                    "src": "16332:66:49"
                  }
                ],
                "id": 13399,
                "name": "Block",
                "src": "16252:152:49"
              }
            ],
            "id": 13400,
            "name": "FunctionDefinition",
            "src": "16172:232:49"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "keccak256Slice",
              "scope": 13432,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_bytes",
                      "scope": 13431,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 13401,
                        "name": "ElementaryTypeName",
                        "src": "16434:5:49"
                      }
                    ],
                    "id": 13402,
                    "name": "VariableDeclaration",
                    "src": "16434:19:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_start",
                      "scope": 13431,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13403,
                        "name": "ElementaryTypeName",
                        "src": "16455:4:49"
                      }
                    ],
                    "id": 13404,
                    "name": "VariableDeclaration",
                    "src": "16455:11:49"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_length",
                      "scope": 13431,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 13405,
                        "name": "ElementaryTypeName",
                        "src": "16468:4:49"
                      }
                    ],
                    "id": 13406,
                    "name": "VariableDeclaration",
                    "src": "16468:12:49"
                  }
                ],
                "id": 13407,
                "name": "ParameterList",
                "src": "16433:48:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "result",
                      "scope": 13431,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 13408,
                        "name": "ElementaryTypeName",
                        "src": "16505:7:49"
                      }
                    ],
                    "id": 13409,
                    "name": "VariableDeclaration",
                    "src": "16505:14:49"
                  }
                ],
                "id": 13410,
                "name": "ParameterList",
                "src": "16504:16:49"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        13412
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "_end",
                          "scope": 13430,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 13411,
                            "name": "ElementaryTypeName",
                            "src": "16531:4:49"
                          }
                        ],
                        "id": 13412,
                        "name": "VariableDeclaration",
                        "src": "16531:9:49"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13404,
                              "type": "uint256",
                              "value": "_start"
                            },
                            "id": 13413,
                            "name": "Identifier",
                            "src": "16543:6:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 13406,
                              "type": "uint256",
                              "value": "_length"
                            },
                            "id": 13414,
                            "name": "Identifier",
                            "src": "16552:7:49"
                          }
                        ],
                        "id": 13415,
                        "name": "BinaryOperation",
                        "src": "16543:16:49"
                      }
                    ],
                    "id": 13416,
                    "name": "VariableDeclarationStatement",
                    "src": "16531:28:49"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_f1c269d7eab972b2fd4d87a15c317e920493e7eea923de7e48c0ebcb7f611fa9",
                                  "typeString": "literal_string \"Slice out of bounds\""
                                }
                              ],
                              "overloadedDeclarations": [
                                18363,
                                18364
                              ],
                              "referencedDeclaration": 18364,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 13417,
                            "name": "Identifier",
                            "src": "16569:7:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13412,
                                      "type": "uint256",
                                      "value": "_end"
                                    },
                                    "id": 13418,
                                    "name": "Identifier",
                                    "src": "16577:4:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13404,
                                      "type": "uint256",
                                      "value": "_start"
                                    },
                                    "id": 13419,
                                    "name": "Identifier",
                                    "src": "16584:6:49"
                                  }
                                ],
                                "id": 13420,
                                "name": "BinaryOperation",
                                "src": "16577:13:49"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 13402,
                                          "type": "bytes memory",
                                          "value": "_bytes"
                                        },
                                        "id": 13421,
                                        "name": "Identifier",
                                        "src": "16594:6:49"
                                      }
                                    ],
                                    "id": 13422,
                                    "name": "MemberAccess",
                                    "src": "16594:13:49"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 13412,
                                      "type": "uint256",
                                      "value": "_end"
                                    },
                                    "id": 13423,
                                    "name": "Identifier",
                                    "src": "16611:4:49"
                                  }
                                ],
                                "id": 13424,
                                "name": "BinaryOperation",
                                "src": "16594:21:49"
                              }
                            ],
                            "id": 13425,
                            "name": "BinaryOperation",
                            "src": "16577:38:49"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "536c696365206f7574206f6620626f756e6473",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Slice out of bounds\"",
                              "value": "Slice out of bounds"
                            },
                            "id": 13426,
                            "name": "Literal",
                            "src": "16617:21:49"
                          }
                        ],
                        "id": 13427,
                        "name": "FunctionCall",
                        "src": "16569:70:49"
                      }
                    ],
                    "id": 13428,
                    "name": "ExpressionStatement",
                    "src": "16569:70:49"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "result": {
                            "declaration": 13409,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16673:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_bytes": {
                            "declaration": 13402,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16701:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_start": {
                            "declaration": 13404,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16714:6:49",
                            "valueSize": 1
                          }
                        },
                        {
                          "_length": {
                            "declaration": 13406,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16723:7:49",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    result := keccak256(add(add(_bytes, 32), _start), _length)\n}"
                    },
                    "children": [],
                    "id": 13429,
                    "name": "InlineAssembly",
                    "src": "16650:91:49"
                  }
                ],
                "id": 13430,
                "name": "Block",
                "src": "16521:226:49"
              }
            ],
            "id": 13431,
            "name": "FunctionDefinition",
            "src": "16410:337:49"
          }
        ],
        "id": 13432,
        "name": "ContractDefinition",
        "src": "1360:15389:49"
      }
    ],
    "id": 13433,
    "name": "SourceUnit",
    "src": "0:16750:49"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.17+commit.d19bba13.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x3b50EDeA26bA7bfB040afC1f26f94e21177E47ba",
      "transactionHash": "0x17fc873ed0112aeacd74bbc5b2ffe8375bddb614ccf187181c8bca3e6ea1ddae"
    }
  },
  "schemaVersion": "3.3.4",
  "updatedAt": "2021-11-23T12:01:17.079Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "https://github.com/GNSPS *",
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}