{
  "contractName": "BytesLib",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"solidity-bytes-utils/contracts/BytesLib.sol\":\"BytesLib\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xde793835499803e9a2b59683de8bca5b77e2c4dc63748cf8b72973193e65e656\",\"urls\":[\"bzzr://d3ab468bc9bcc85b245abea04a7dbe404db1f70d2f63e3b9b70ed1fde8138ee9\"]}},\"version\":1}",
  "bytecode": "0x604c6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820f585edd4c6350dc44d01ca6e9e826a567e13016b18da4073146080907aaa20810029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820f585edd4c6350dc44d01ca6e9e826a567e13016b18da4073146080907aaa20810029",
  "sourceMap": "325:18425:16:-;;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": "325:18425:16:-;;;;;;;;",
  "source": "/*\n * @title Solidity Bytes Arrays Utils\n * @author Gonçalo Sá <goncalo.sa@consensys.net>\n *\n * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity.\n *      The library lets you concatenate, slice and type cast bytes arrays both in memory and storage.\n */\n\npragma solidity ^0.5.0;\n\n\nlibrary BytesLib {\n    function concat(\n        bytes memory _preBytes,\n        bytes memory _postBytes\n    )\n        internal\n        pure\n        returns (bytes memory)\n    {\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(\n        bytes memory _bytes,\n        uint _start,\n        uint _length\n    )\n        internal\n        pure\n        returns (bytes memory)\n    {\n        require(_bytes.length >= (_start + _length));\n\n        bytes memory tempBytes;\n\n        assembly {\n            switch iszero(_length)\n            case 0 {\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                // The first word of the slice result is potentially a partial\n                // word read from the original array. To read it, we calculate\n                // the length of that partial word and start copying that many\n                // bytes into the array. The first word we copy will start with\n                // data we don't care about, but the last `lengthmod` bytes will\n                // land at the beginning of the contents of the new array. When\n                // we're done copying, we overwrite the full first word with\n                // the actual length of the slice.\n                let lengthmod := and(_length, 31)\n\n                // The multiplication in the next line is necessary\n                // because when slicing multiples of 32 bytes (lengthmod == 0)\n                // the following copy loop was copying the origin's length\n                // and then ending prematurely not copying everything it should.\n                let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n                let end := add(mc, _length)\n\n                for {\n                    // The multiplication in the next line has the same exact purpose\n                    // as the one above.\n                    let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n                } lt(mc, end) {\n                    mc := add(mc, 0x20)\n                    cc := add(cc, 0x20)\n                } {\n                    mstore(mc, mload(cc))\n                }\n\n                mstore(tempBytes, _length)\n\n                //update free-memory pointer\n                //allocating the array padded to 32 bytes like the compiler does now\n                mstore(0x40, and(add(mc, 31), not(31)))\n            }\n            //if we want a zero-length slice let's just return a zero-length array\n            default {\n                tempBytes := mload(0x40)\n\n                mstore(0x40, add(tempBytes, 0x20))\n            }\n        }\n\n        return tempBytes;\n    }\n\n    function toAddress(bytes memory _bytes, uint _start) internal  pure returns (address) {\n        require(_bytes.length >= (_start + 20));\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 toUint8(bytes memory _bytes, uint _start) internal  pure returns (uint8) {\n        require(_bytes.length >= (_start + 1));\n        uint8 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x1), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint16(bytes memory _bytes, uint _start) internal  pure returns (uint16) {\n        require(_bytes.length >= (_start + 2));\n        uint16 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x2), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint32(bytes memory _bytes, uint _start) internal  pure returns (uint32) {\n        require(_bytes.length >= (_start + 4));\n        uint32 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x4), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint64(bytes memory _bytes, uint _start) internal  pure returns (uint64) {\n        require(_bytes.length >= (_start + 8));\n        uint64 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x8), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint96(bytes memory _bytes, uint _start) internal  pure returns (uint96) {\n        require(_bytes.length >= (_start + 12));\n        uint96 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0xc), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint128(bytes memory _bytes, uint _start) internal  pure returns (uint128) {\n        require(_bytes.length >= (_start + 16));\n        uint128 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x10), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toUint(bytes memory _bytes, uint _start) internal  pure returns (uint256) {\n        require(_bytes.length >= (_start + 32));\n        uint256 tempUint;\n\n        assembly {\n            tempUint := mload(add(add(_bytes, 0x20), _start))\n        }\n\n        return tempUint;\n    }\n\n    function toBytes32(bytes memory _bytes, uint _start) internal  pure returns (bytes32) {\n        require(_bytes.length >= (_start + 32));\n        bytes32 tempBytes32;\n\n        assembly {\n            tempBytes32 := mload(add(add(_bytes, 0x20), _start))\n        }\n\n        return tempBytes32;\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(\n        bytes storage _preBytes,\n        bytes memory _postBytes\n    )\n        internal\n        view\n        returns (bool)\n    {\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",
  "sourcePath": "solidity-bytes-utils/contracts/BytesLib.sol",
  "ast": {
    "absolutePath": "solidity-bytes-utils/contracts/BytesLib.sol",
    "exportedSymbols": {
      "BytesLib": [
        4618
      ]
    },
    "id": 4619,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4296,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "299:23:16"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4618,
        "linearizedBaseContracts": [
          4618
        ],
        "name": "BytesLib",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4311,
              "nodeType": "Block",
              "src": "500:2804:16",
              "statements": [
                {
                  "assignments": [
                    4306
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4306,
                      "name": "tempBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 4311,
                      "src": "510:22:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4305,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "510:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4307,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "510:22:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "696:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "872:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1144:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "902:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1487:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4300,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2485:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4300,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2067:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2098:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2127:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3166:9:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4308,
                  "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    {\n        mstore(mc, mload(cc))\n    }\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    {\n        mstore(mc, mload(cc))\n    }\n    mstore(0x40, and(add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31)))\n}",
                  "src": "543:2728:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4309,
                    "name": "tempBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4306,
                    "src": "3288:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4304,
                  "id": 4310,
                  "nodeType": "Return",
                  "src": "3281:16:16"
                }
              ]
            },
            "documentation": null,
            "id": 4312,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4298,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "373:22:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4297,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "373:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4300,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "405:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4299,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "363:71:16"
            },
            "returnParameters": {
              "id": 4304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "482:12:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4302,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "482:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "481:14:16"
            },
            "scope": 4618,
            "src": "348:2956:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4320,
              "nodeType": "Block",
              "src": "3392:6032:16",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3653:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4271:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "4947:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7272:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "6385:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7221:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5477:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "6530:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "8229:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "8450:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8785:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8836:10:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4319,
                  "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        {\n            sstore(sc, mload(mc))\n        }\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        {\n            sstore(sc, mload(mc))\n        }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n}",
                  "src": "3402:6016:16"
                }
              ]
            },
            "documentation": null,
            "id": 4321,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concatStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4314,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4321,
                  "src": "3333:23:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4313,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3333:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4316,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4321,
                  "src": "3358:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4315,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3358:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3332:50:16"
            },
            "returnParameters": {
              "id": 4318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3392:0:16"
            },
            "scope": 4618,
            "src": "3310:6114:16",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4348,
              "nodeType": "Block",
              "src": "9588:2378:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4333,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4323,
                            "src": "9606:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9606:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4335,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4325,
                                "src": "9624:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4336,
                                "name": "_length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4327,
                                "src": "9633:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9624:16:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4338,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "9623:18:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9606:35:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4332,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "9598:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9598:44:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4341,
                  "nodeType": "ExpressionStatement",
                  "src": "9598:44:16"
                },
                {
                  "assignments": [
                    4343
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4343,
                      "name": "tempBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 4348,
                      "src": "9653:22:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4342,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "9653:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4344,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9653:22:16"
                },
                {
                  "externalReferences": [
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9723:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9907:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10576:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11015:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10927:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4323,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11216:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4325,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11267:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11833:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11491:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11502:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11892:9:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4345,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch iszero(_length)\n    case 0 {\n        tempBytes := mload(0x40)\n        let lengthmod := and(_length, 31)\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n        let end := add(mc, _length)\n        for {\n            let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n        }\n        lt(mc, end)\n        {\n            mc := add(mc, 0x20)\n            cc := add(cc, 0x20)\n        }\n        {\n            mstore(mc, mload(cc))\n        }\n        mstore(tempBytes, _length)\n        mstore(0x40, and(add(mc, 31), not(31)))\n    }\n    default {\n        tempBytes := mload(0x40)\n        mstore(0x40, add(tempBytes, 0x20))\n    }\n}",
                  "src": "9686:2247:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4346,
                    "name": "tempBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4343,
                    "src": "11950:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4331,
                  "id": 4347,
                  "nodeType": "Return",
                  "src": "11943:16:16"
                }
              ]
            },
            "documentation": null,
            "id": 4349,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "slice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4323,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9454:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4322,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9454:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4325,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9483:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4324,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9483:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4327,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9504:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4326,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9504:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9444:78:16"
            },
            "returnParameters": {
              "id": 4331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9570:12:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4329,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9570:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9569:14:16"
            },
            "scope": 4618,
            "src": "9430:2536:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4374,
              "nodeType": "Block",
              "src": "12058:243:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4359,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4351,
                            "src": "12076:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12076:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4361,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "12094:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3230",
                                "id": 4362,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12103:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                },
                                "value": "20"
                              },
                              "src": "12094:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4364,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12093:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12076:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4358,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12068:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12068:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4367,
                  "nodeType": "ExpressionStatement",
                  "src": "12068:39:16"
                },
                {
                  "assignments": [
                    4369
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4369,
                      "name": "tempAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 4374,
                      "src": "12117:19:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4368,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12117:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4370,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12117:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempAddress": {
                        "declaration": 4369,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12170:11:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4351,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12203:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4353,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12218:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4371,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n}",
                  "src": "12147:119:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4372,
                    "name": "tempAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4369,
                    "src": "12283:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4357,
                  "id": 4373,
                  "nodeType": "Return",
                  "src": "12276:18:16"
                }
              ]
            },
            "documentation": null,
            "id": 4375,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4351,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "11991:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4350,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11991:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4353,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "12012:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4352,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12012:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11990:34:16"
            },
            "returnParameters": {
              "id": 4357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4356,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "12049:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4355,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12049:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12048:9:16"
            },
            "scope": 4618,
            "src": "11972:329:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4400,
              "nodeType": "Block",
              "src": "12389:196:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4385,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4377,
                            "src": "12407:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12407:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4387,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4379,
                                "src": "12425:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 4388,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12434:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "12425:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4390,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12424:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12407:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4384,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12399:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12399:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4393,
                  "nodeType": "ExpressionStatement",
                  "src": "12399:38:16"
                },
                {
                  "assignments": [
                    4395
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4395,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4400,
                      "src": "12447:14:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 4394,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "12447:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4396,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12447:14:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4395,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12495:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4377,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12521:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4379,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12535:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4397,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x1), _start))\n}",
                  "src": "12472:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4398,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4395,
                    "src": "12570:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 4383,
                  "id": 4399,
                  "nodeType": "Return",
                  "src": "12563:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4401,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4377,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12324:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4376,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12324:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4379,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12345:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4378,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12345:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12323:34:16"
            },
            "returnParameters": {
              "id": 4383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4382,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12382:5:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4381,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12382:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12381:7:16"
            },
            "scope": 4618,
            "src": "12307:278:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4426,
              "nodeType": "Block",
              "src": "12675:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4411,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4403,
                            "src": "12693:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12693:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4413,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4405,
                                "src": "12711:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 4414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12720:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "12711:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4416,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12710:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12693:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4410,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12685:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12685:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4419,
                  "nodeType": "ExpressionStatement",
                  "src": "12685:38:16"
                },
                {
                  "assignments": [
                    4421
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4421,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4426,
                      "src": "12733:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 4420,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "12733:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4422,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12733:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4421,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12782:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4403,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12808:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4405,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12822:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4423,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x2), _start))\n}",
                  "src": "12759:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4424,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4421,
                    "src": "12857:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 4409,
                  "id": 4425,
                  "nodeType": "Return",
                  "src": "12850:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4427,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4403,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12609:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4402,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12609:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4405,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12630:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4404,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12630:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12608:34:16"
            },
            "returnParameters": {
              "id": 4409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4408,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12667:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4407,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12667:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12666:8:16"
            },
            "scope": 4618,
            "src": "12591:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4452,
              "nodeType": "Block",
              "src": "12962:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4437,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "12980:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12980:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4439,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4431,
                                "src": "12998:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 4440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13007:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "12998:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4442,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12997:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12980:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4436,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12972:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12972:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4445,
                  "nodeType": "ExpressionStatement",
                  "src": "12972:38:16"
                },
                {
                  "assignments": [
                    4447
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4447,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4452,
                      "src": "13020:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4446,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13020:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4448,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13020:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4447,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13069:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4429,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13095:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4431,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13109:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4449,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x4), _start))\n}",
                  "src": "13046:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4450,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4447,
                    "src": "13144:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 4435,
                  "id": 4451,
                  "nodeType": "Return",
                  "src": "13137:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4429,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12896:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4428,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12896:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4431,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12917:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4430,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12917:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12895:34:16"
            },
            "returnParameters": {
              "id": 4435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4434,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12954:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4433,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12954:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12953:8:16"
            },
            "scope": 4618,
            "src": "12878:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4478,
              "nodeType": "Block",
              "src": "13249:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4463,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4455,
                            "src": "13267:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13267:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4465,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4457,
                                "src": "13285:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "38",
                                "id": 4466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13294:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "13285:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4468,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13284:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13267:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4462,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13259:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13259:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4471,
                  "nodeType": "ExpressionStatement",
                  "src": "13259:38:16"
                },
                {
                  "assignments": [
                    4473
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4473,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4478,
                      "src": "13307:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4472,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13307:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4474,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13307:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4473,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13356:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4455,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13382:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4457,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13396:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4475,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x8), _start))\n}",
                  "src": "13333:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4476,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4473,
                    "src": "13431:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4461,
                  "id": 4477,
                  "nodeType": "Return",
                  "src": "13424:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4479,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4455,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13183:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4454,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13183:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4457,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13204:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4456,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13204:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13182:34:16"
            },
            "returnParameters": {
              "id": 4461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4460,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13241:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4459,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13241:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13240:8:16"
            },
            "scope": 4618,
            "src": "13165:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4504,
              "nodeType": "Block",
              "src": "13536:198:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4489,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4481,
                            "src": "13554:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13554:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4491,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4483,
                                "src": "13572:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3132",
                                "id": 4492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13581:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_12_by_1",
                                  "typeString": "int_const 12"
                                },
                                "value": "12"
                              },
                              "src": "13572:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4494,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13571:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13554:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4488,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13546:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13546:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4497,
                  "nodeType": "ExpressionStatement",
                  "src": "13546:39:16"
                },
                {
                  "assignments": [
                    4499
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4499,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4504,
                      "src": "13595:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 4498,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "13595:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4500,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13595:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13644:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4481,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13670:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4483,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13684:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4501,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0xc), _start))\n}",
                  "src": "13621:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4502,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4499,
                    "src": "13719:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "functionReturnParameters": 4487,
                  "id": 4503,
                  "nodeType": "Return",
                  "src": "13712:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint96",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4481,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13470:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4480,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13470:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4483,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13491:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4482,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13491:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13469:34:16"
            },
            "returnParameters": {
              "id": 4487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4486,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13528:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 4485,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "13528:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13527:8:16"
            },
            "scope": 4618,
            "src": "13452:282:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4530,
              "nodeType": "Block",
              "src": "13826:200:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4515,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "13844:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13844:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4517,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4509,
                                "src": "13862:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3136",
                                "id": 4518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13871:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "16"
                              },
                              "src": "13862:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4520,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13861:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13844:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4514,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13836:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13836:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4523,
                  "nodeType": "ExpressionStatement",
                  "src": "13836:39:16"
                },
                {
                  "assignments": [
                    4525
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4525,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4530,
                      "src": "13885:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 4524,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "13885:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4526,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13885:16:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4525,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13935:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4507,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13961:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4509,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13976:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4527,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x10), _start))\n}",
                  "src": "13912:82:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4528,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4525,
                    "src": "14011:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 4513,
                  "id": 4529,
                  "nodeType": "Return",
                  "src": "14004:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4531,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint128",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4507,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13759:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4506,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13759:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4509,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13780:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4508,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13780:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13758:34:16"
            },
            "returnParameters": {
              "id": 4513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13817:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4511,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "13817:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13816:9:16"
            },
            "scope": 4618,
            "src": "13740:286:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4556,
              "nodeType": "Block",
              "src": "14115:200:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4541,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4533,
                            "src": "14133:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14133:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4543,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4535,
                                "src": "14151:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 4544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14160:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "14151:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4546,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "14150:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14133:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "14125:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14125:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4549,
                  "nodeType": "ExpressionStatement",
                  "src": "14125:39:16"
                },
                {
                  "assignments": [
                    4551
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4551,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4556,
                      "src": "14174:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4550,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14174:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4552,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14174:16:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4551,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14224:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4533,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14250:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4535,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14265:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4553,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x20), _start))\n}",
                  "src": "14201:82:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4554,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4551,
                    "src": "14300:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4539,
                  "id": 4555,
                  "nodeType": "Return",
                  "src": "14293:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4557,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4533,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14048:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4532,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14048:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4535,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14069:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4534,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "14069:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14047:34:16"
            },
            "returnParameters": {
              "id": 4539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4538,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14106:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4537,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14106:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14105:9:16"
            },
            "scope": 4618,
            "src": "14032:283:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4582,
              "nodeType": "Block",
              "src": "14407:209:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4567,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4559,
                            "src": "14425:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14425:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4569,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4561,
                                "src": "14443:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 4570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14452:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "14443:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4572,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "14442:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14425:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4566,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "14417:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14417:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "14417:39:16"
                },
                {
                  "assignments": [
                    4577
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4577,
                      "name": "tempBytes32",
                      "nodeType": "VariableDeclaration",
                      "scope": 4582,
                      "src": "14466:19:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4576,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14466:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4578,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14466:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempBytes32": {
                        "declaration": 4577,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14519:11:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4559,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14548:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4561,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14563:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4579,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempBytes32 := mload(add(add(_bytes, 0x20), _start))\n}",
                  "src": "14496:85:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4580,
                    "name": "tempBytes32",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4577,
                    "src": "14598:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4565,
                  "id": 4581,
                  "nodeType": "Return",
                  "src": "14591:18:16"
                }
              ]
            },
            "documentation": null,
            "id": 4583,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4559,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14340:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14340:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4561,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14361:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4560,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "14361:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14339:34:16"
            },
            "returnParameters": {
              "id": 4565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14398:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14398:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14397:9:16"
            },
            "scope": 4618,
            "src": "14321:295:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4599,
              "nodeType": "Block",
              "src": "14715:1320:16",
              "statements": [
                {
                  "assignments": [
                    4593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4593,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 4599,
                      "src": "14725:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4592,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14725:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4595,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14740:4:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14725:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes": {
                        "declaration": 4585,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14798:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4587,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14909:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4585,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15213:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4587,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15330:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4593,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15801:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4593,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15968:7:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4596,
                  "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 {\n        success := 0\n    }\n}",
                  "src": "14755:1249:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4597,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4593,
                    "src": "16021:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4591,
                  "id": 4598,
                  "nodeType": "Return",
                  "src": "16014:14:16"
                }
              ]
            },
            "documentation": null,
            "id": 4600,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4585,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14637:22:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4584,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14637:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4587,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14661:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4586,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14661:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14636:49:16"
            },
            "returnParameters": {
              "id": 4591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4590,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14709:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4589,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14709:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14708:6:16"
            },
            "scope": 4618,
            "src": "14622:1413:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4616,
              "nodeType": "Block",
              "src": "16192:2556:16",
              "statements": [
                {
                  "assignments": [
                    4610
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4610,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 4616,
                      "src": "16202:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4609,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16202:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4612,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16217:4:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16202:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 4602,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "16319:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16535:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17240:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17333:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17930:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4602,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "17820:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18681:7:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4613,
                  "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))))\n                {\n                    success := 0\n                }\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                }\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 {\n        success := 0\n    }\n}",
                  "src": "16232:2485:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4614,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4610,
                    "src": "18734:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4608,
                  "id": 4615,
                  "nodeType": "Return",
                  "src": "18727:14:16"
                }
              ]
            },
            "documentation": null,
            "id": 4617,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equalStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4602,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16072:23:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4601,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16072:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4604,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16105:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4603,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16105:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16062:72:16"
            },
            "returnParameters": {
              "id": 4608,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4607,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16182:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4606,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16182:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16181:6:16"
            },
            "scope": 4618,
            "src": "16041:2707:16",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4619,
        "src": "325:18425:16"
      }
    ],
    "src": "299:18452:16"
  },
  "legacyAST": {
    "absolutePath": "solidity-bytes-utils/contracts/BytesLib.sol",
    "exportedSymbols": {
      "BytesLib": [
        4618
      ]
    },
    "id": 4619,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4296,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "299:23:16"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4618,
        "linearizedBaseContracts": [
          4618
        ],
        "name": "BytesLib",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4311,
              "nodeType": "Block",
              "src": "500:2804:16",
              "statements": [
                {
                  "assignments": [
                    4306
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4306,
                      "name": "tempBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 4311,
                      "src": "510:22:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4305,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "510:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4307,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "510:22:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "696:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "872:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1144:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "902:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1487:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4300,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2485:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4300,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2067:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2098:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4306,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2127:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4298,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3166:9:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4308,
                  "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    {\n        mstore(mc, mload(cc))\n    }\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    {\n        mstore(mc, mload(cc))\n    }\n    mstore(0x40, and(add(add(end, iszero(add(length, mload(_preBytes)))), 31), not(31)))\n}",
                  "src": "543:2728:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4309,
                    "name": "tempBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4306,
                    "src": "3288:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4304,
                  "id": 4310,
                  "nodeType": "Return",
                  "src": "3281:16:16"
                }
              ]
            },
            "documentation": null,
            "id": 4312,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4298,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "373:22:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4297,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "373:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4300,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "405:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4299,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "363:71:16"
            },
            "returnParameters": {
              "id": 4304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4312,
                  "src": "482:12:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4302,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "482:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "481:14:16"
            },
            "scope": 4618,
            "src": "348:2956:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4320,
              "nodeType": "Block",
              "src": "3392:6032:16",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "3653:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4271:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "4947:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7272:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "6385:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "7221:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5477:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "6530:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "8229:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4314,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "8450:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8785:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4316,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "8836:10:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4319,
                  "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        {\n            sstore(sc, mload(mc))\n        }\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        {\n            sstore(sc, mload(mc))\n        }\n        mask := exp(0x100, sub(mc, end))\n        sstore(sc, mul(div(mload(mc), mask), mask))\n    }\n}",
                  "src": "3402:6016:16"
                }
              ]
            },
            "documentation": null,
            "id": 4321,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concatStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4314,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4321,
                  "src": "3333:23:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4313,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3333:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4316,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4321,
                  "src": "3358:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4315,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3358:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3332:50:16"
            },
            "returnParameters": {
              "id": 4318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3392:0:16"
            },
            "scope": 4618,
            "src": "3310:6114:16",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4348,
              "nodeType": "Block",
              "src": "9588:2378:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4333,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4323,
                            "src": "9606:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9606:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4337,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4335,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4325,
                                "src": "9624:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4336,
                                "name": "_length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4327,
                                "src": "9633:7:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9624:16:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4338,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "9623:18:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9606:35:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4332,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "9598:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9598:44:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4341,
                  "nodeType": "ExpressionStatement",
                  "src": "9598:44:16"
                },
                {
                  "assignments": [
                    4343
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4343,
                      "name": "tempBytes",
                      "nodeType": "VariableDeclaration",
                      "scope": 4348,
                      "src": "9653:22:16",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4342,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "9653:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4344,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9653:22:16"
                },
                {
                  "externalReferences": [
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9723:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "9907:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10576:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11015:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "10927:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4323,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11216:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4325,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11267:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11833:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11491:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_length": {
                        "declaration": 4327,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11502:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "tempBytes": {
                        "declaration": 4343,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "11892:9:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4345,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    switch iszero(_length)\n    case 0 {\n        tempBytes := mload(0x40)\n        let lengthmod := and(_length, 31)\n        let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\n        let end := add(mc, _length)\n        for {\n            let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\n        }\n        lt(mc, end)\n        {\n            mc := add(mc, 0x20)\n            cc := add(cc, 0x20)\n        }\n        {\n            mstore(mc, mload(cc))\n        }\n        mstore(tempBytes, _length)\n        mstore(0x40, and(add(mc, 31), not(31)))\n    }\n    default {\n        tempBytes := mload(0x40)\n        mstore(0x40, add(tempBytes, 0x20))\n    }\n}",
                  "src": "9686:2247:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4346,
                    "name": "tempBytes",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4343,
                    "src": "11950:9:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 4331,
                  "id": 4347,
                  "nodeType": "Return",
                  "src": "11943:16:16"
                }
              ]
            },
            "documentation": null,
            "id": 4349,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "slice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4323,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9454:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4322,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9454:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4325,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9483:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4324,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9483:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4327,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9504:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4326,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9504:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9444:78:16"
            },
            "returnParameters": {
              "id": 4331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4330,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4349,
                  "src": "9570:12:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4329,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9570:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9569:14:16"
            },
            "scope": 4618,
            "src": "9430:2536:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4374,
              "nodeType": "Block",
              "src": "12058:243:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4365,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4359,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4351,
                            "src": "12076:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12076:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4361,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "12094:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3230",
                                "id": 4362,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12103:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_20_by_1",
                                  "typeString": "int_const 20"
                                },
                                "value": "20"
                              },
                              "src": "12094:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4364,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12093:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12076:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4358,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12068:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12068:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4367,
                  "nodeType": "ExpressionStatement",
                  "src": "12068:39:16"
                },
                {
                  "assignments": [
                    4369
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4369,
                      "name": "tempAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 4374,
                      "src": "12117:19:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4368,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12117:7:16",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4370,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12117:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempAddress": {
                        "declaration": 4369,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12170:11:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4351,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12203:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4353,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12218:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4371,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)\n}",
                  "src": "12147:119:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4372,
                    "name": "tempAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4369,
                    "src": "12283:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4357,
                  "id": 4373,
                  "nodeType": "Return",
                  "src": "12276:18:16"
                }
              ]
            },
            "documentation": null,
            "id": 4375,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4351,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "11991:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4350,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11991:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4353,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "12012:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4352,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12012:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11990:34:16"
            },
            "returnParameters": {
              "id": 4357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4356,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4375,
                  "src": "12049:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4355,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12049:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12048:9:16"
            },
            "scope": 4618,
            "src": "11972:329:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4400,
              "nodeType": "Block",
              "src": "12389:196:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4385,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4377,
                            "src": "12407:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12407:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4387,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4379,
                                "src": "12425:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 4388,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12434:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "12425:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4390,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12424:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12407:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4384,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12399:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12399:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4393,
                  "nodeType": "ExpressionStatement",
                  "src": "12399:38:16"
                },
                {
                  "assignments": [
                    4395
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4395,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4400,
                      "src": "12447:14:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 4394,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "12447:5:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4396,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12447:14:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4395,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12495:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4377,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12521:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4379,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12535:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4397,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x1), _start))\n}",
                  "src": "12472:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4398,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4395,
                    "src": "12570:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 4383,
                  "id": 4399,
                  "nodeType": "Return",
                  "src": "12563:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4401,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4377,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12324:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4376,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12324:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4379,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12345:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4378,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12345:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12323:34:16"
            },
            "returnParameters": {
              "id": 4383,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4382,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4401,
                  "src": "12382:5:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4381,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12382:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12381:7:16"
            },
            "scope": 4618,
            "src": "12307:278:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4426,
              "nodeType": "Block",
              "src": "12675:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4411,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4403,
                            "src": "12693:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12693:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4413,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4405,
                                "src": "12711:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "32",
                                "id": 4414,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12720:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "12711:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4416,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12710:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12693:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4410,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12685:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12685:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4419,
                  "nodeType": "ExpressionStatement",
                  "src": "12685:38:16"
                },
                {
                  "assignments": [
                    4421
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4421,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4426,
                      "src": "12733:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 4420,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "12733:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4422,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12733:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4421,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12782:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4403,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12808:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4405,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "12822:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4423,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x2), _start))\n}",
                  "src": "12759:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4424,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4421,
                    "src": "12857:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 4409,
                  "id": 4425,
                  "nodeType": "Return",
                  "src": "12850:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4427,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4403,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12609:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4402,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12609:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4405,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12630:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4404,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12630:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12608:34:16"
            },
            "returnParameters": {
              "id": 4409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4408,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4427,
                  "src": "12667:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4407,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12667:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12666:8:16"
            },
            "scope": 4618,
            "src": "12591:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4452,
              "nodeType": "Block",
              "src": "12962:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4437,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4429,
                            "src": "12980:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "12980:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4439,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4431,
                                "src": "12998:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "34",
                                "id": 4440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13007:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "12998:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4442,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "12997:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12980:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4436,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "12972:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12972:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4445,
                  "nodeType": "ExpressionStatement",
                  "src": "12972:38:16"
                },
                {
                  "assignments": [
                    4447
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4447,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4452,
                      "src": "13020:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4446,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13020:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4448,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13020:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4447,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13069:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4429,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13095:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4431,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13109:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4449,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x4), _start))\n}",
                  "src": "13046:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4450,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4447,
                    "src": "13144:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 4435,
                  "id": 4451,
                  "nodeType": "Return",
                  "src": "13137:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4429,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12896:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4428,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12896:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4431,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12917:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4430,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "12917:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12895:34:16"
            },
            "returnParameters": {
              "id": 4435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4434,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "12954:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4433,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12954:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12953:8:16"
            },
            "scope": 4618,
            "src": "12878:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4478,
              "nodeType": "Block",
              "src": "13249:197:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4463,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4455,
                            "src": "13267:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13267:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4465,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4457,
                                "src": "13285:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "38",
                                "id": 4466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13294:1:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_8_by_1",
                                  "typeString": "int_const 8"
                                },
                                "value": "8"
                              },
                              "src": "13285:10:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4468,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13284:12:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13267:29:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4462,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13259:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13259:38:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4471,
                  "nodeType": "ExpressionStatement",
                  "src": "13259:38:16"
                },
                {
                  "assignments": [
                    4473
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4473,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4478,
                      "src": "13307:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 4472,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "13307:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4474,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13307:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4473,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13356:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4455,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13382:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4457,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13396:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4475,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x8), _start))\n}",
                  "src": "13333:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4476,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4473,
                    "src": "13431:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 4461,
                  "id": 4477,
                  "nodeType": "Return",
                  "src": "13424:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4479,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint64",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4455,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13183:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4454,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13183:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4457,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13204:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4456,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13204:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13182:34:16"
            },
            "returnParameters": {
              "id": 4461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4460,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4479,
                  "src": "13241:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 4459,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "13241:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13240:8:16"
            },
            "scope": 4618,
            "src": "13165:281:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4504,
              "nodeType": "Block",
              "src": "13536:198:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4495,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4489,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4481,
                            "src": "13554:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4490,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13554:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4491,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4483,
                                "src": "13572:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3132",
                                "id": 4492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13581:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_12_by_1",
                                  "typeString": "int_const 12"
                                },
                                "value": "12"
                              },
                              "src": "13572:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4494,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13571:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13554:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4488,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13546:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13546:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4497,
                  "nodeType": "ExpressionStatement",
                  "src": "13546:39:16"
                },
                {
                  "assignments": [
                    4499
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4499,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4504,
                      "src": "13595:15:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint96",
                        "typeString": "uint96"
                      },
                      "typeName": {
                        "id": 4498,
                        "name": "uint96",
                        "nodeType": "ElementaryTypeName",
                        "src": "13595:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4500,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13595:15:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4499,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13644:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4481,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13670:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4483,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13684:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4501,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0xc), _start))\n}",
                  "src": "13621:81:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4502,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4499,
                    "src": "13719:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "functionReturnParameters": 4487,
                  "id": 4503,
                  "nodeType": "Return",
                  "src": "13712:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint96",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4481,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13470:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4480,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13470:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4483,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13491:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4482,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13491:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13469:34:16"
            },
            "returnParameters": {
              "id": 4487,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4486,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4505,
                  "src": "13528:6:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 4485,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "13528:6:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13527:8:16"
            },
            "scope": 4618,
            "src": "13452:282:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4530,
              "nodeType": "Block",
              "src": "13826:200:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4515,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4507,
                            "src": "13844:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13844:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4517,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4509,
                                "src": "13862:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3136",
                                "id": 4518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13871:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                },
                                "value": "16"
                              },
                              "src": "13862:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4520,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13861:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13844:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4514,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "13836:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13836:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4523,
                  "nodeType": "ExpressionStatement",
                  "src": "13836:39:16"
                },
                {
                  "assignments": [
                    4525
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4525,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4530,
                      "src": "13885:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 4524,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "13885:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4526,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13885:16:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4525,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13935:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4507,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13961:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4509,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "13976:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4527,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x10), _start))\n}",
                  "src": "13912:82:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4528,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4525,
                    "src": "14011:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "functionReturnParameters": 4513,
                  "id": 4529,
                  "nodeType": "Return",
                  "src": "14004:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4531,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint128",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4507,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13759:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4506,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13759:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4509,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13780:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4508,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "13780:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13758:34:16"
            },
            "returnParameters": {
              "id": 4513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4512,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4531,
                  "src": "13817:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4511,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "13817:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13816:9:16"
            },
            "scope": 4618,
            "src": "13740:286:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4556,
              "nodeType": "Block",
              "src": "14115:200:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4541,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4533,
                            "src": "14133:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14133:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4545,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4543,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4535,
                                "src": "14151:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 4544,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14160:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "14151:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4546,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "14150:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14133:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4540,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "14125:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14125:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4549,
                  "nodeType": "ExpressionStatement",
                  "src": "14125:39:16"
                },
                {
                  "assignments": [
                    4551
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4551,
                      "name": "tempUint",
                      "nodeType": "VariableDeclaration",
                      "scope": 4556,
                      "src": "14174:16:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4550,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14174:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4552,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14174:16:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempUint": {
                        "declaration": 4551,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14224:8:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4533,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14250:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4535,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14265:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4553,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempUint := mload(add(add(_bytes, 0x20), _start))\n}",
                  "src": "14201:82:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4554,
                    "name": "tempUint",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4551,
                    "src": "14300:8:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 4539,
                  "id": 4555,
                  "nodeType": "Return",
                  "src": "14293:15:16"
                }
              ]
            },
            "documentation": null,
            "id": 4557,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toUint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4533,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14048:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4532,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14048:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4535,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14069:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4534,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "14069:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14047:34:16"
            },
            "returnParameters": {
              "id": 4539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4538,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4557,
                  "src": "14106:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4537,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14106:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14105:9:16"
            },
            "scope": 4618,
            "src": "14032:283:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4582,
              "nodeType": "Block",
              "src": "14407:209:16",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4567,
                            "name": "_bytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4559,
                            "src": "14425:6:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 4568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14425:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4569,
                                "name": "_start",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4561,
                                "src": "14443:6:16",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 4570,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14452:2:16",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "14443:11:16",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4572,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "14442:13:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14425:30:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4566,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4699,
                        4700
                      ],
                      "referencedDeclaration": 4699,
                      "src": "14417:7:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14417:39:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4575,
                  "nodeType": "ExpressionStatement",
                  "src": "14417:39:16"
                },
                {
                  "assignments": [
                    4577
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4577,
                      "name": "tempBytes32",
                      "nodeType": "VariableDeclaration",
                      "scope": 4582,
                      "src": "14466:19:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4576,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "14466:7:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4578,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14466:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "tempBytes32": {
                        "declaration": 4577,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14519:11:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_bytes": {
                        "declaration": 4559,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14548:6:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_start": {
                        "declaration": 4561,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14563:6:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4579,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    tempBytes32 := mload(add(add(_bytes, 0x20), _start))\n}",
                  "src": "14496:85:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4580,
                    "name": "tempBytes32",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4577,
                    "src": "14598:11:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 4565,
                  "id": 4581,
                  "nodeType": "Return",
                  "src": "14591:18:16"
                }
              ]
            },
            "documentation": null,
            "id": 4583,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4559,
                  "name": "_bytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14340:19:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4558,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14340:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4561,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14361:11:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4560,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "14361:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14339:34:16"
            },
            "returnParameters": {
              "id": 4565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4564,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4583,
                  "src": "14398:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14398:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14397:9:16"
            },
            "scope": 4618,
            "src": "14321:295:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4599,
              "nodeType": "Block",
              "src": "14715:1320:16",
              "statements": [
                {
                  "assignments": [
                    4593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4593,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 4599,
                      "src": "14725:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4592,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14725:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4595,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14740:4:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14725:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes": {
                        "declaration": 4585,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14798:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4587,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "14909:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes": {
                        "declaration": 4585,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15213:9:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4587,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15330:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4593,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15801:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4593,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "15968:7:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4596,
                  "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 {\n        success := 0\n    }\n}",
                  "src": "14755:1249:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4597,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4593,
                    "src": "16021:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4591,
                  "id": 4598,
                  "nodeType": "Return",
                  "src": "16014:14:16"
                }
              ]
            },
            "documentation": null,
            "id": 4600,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4585,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14637:22:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4584,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14637:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4587,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14661:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4586,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14661:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14636:49:16"
            },
            "returnParameters": {
              "id": 4591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4590,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4600,
                  "src": "14709:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4589,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14709:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14708:6:16"
            },
            "scope": 4618,
            "src": "14622:1413:16",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4616,
              "nodeType": "Block",
              "src": "16192:2556:16",
              "statements": [
                {
                  "assignments": [
                    4610
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4610,
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 4616,
                      "src": "16202:12:16",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4609,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "16202:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4612,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 4611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "16217:4:16",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16202:19:16"
                },
                {
                  "externalReferences": [
                    {
                      "_preBytes_slot": {
                        "declaration": 4602,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "16319:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "16535:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17240:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17333:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_postBytes": {
                        "declaration": 4604,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "17930:10:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "_preBytes_slot": {
                        "declaration": 4602,
                        "isOffset": false,
                        "isSlot": true,
                        "src": "17820:14:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18450:7:16",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 4610,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "18681:7:16",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4613,
                  "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))))\n                {\n                    success := 0\n                }\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                }\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 {\n        success := 0\n    }\n}",
                  "src": "16232:2485:16"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4614,
                    "name": "success",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4610,
                    "src": "18734:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4608,
                  "id": 4615,
                  "nodeType": "Return",
                  "src": "18727:14:16"
                }
              ]
            },
            "documentation": null,
            "id": 4617,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equalStorage",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4602,
                  "name": "_preBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16072:23:16",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4601,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16072:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4604,
                  "name": "_postBytes",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16105:23:16",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4603,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16105:5:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16062:72:16"
            },
            "returnParameters": {
              "id": 4608,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4607,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4617,
                  "src": "16182:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4606,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16182:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16181:6:16"
            },
            "scope": 4618,
            "src": "16041:2707:16",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4619,
        "src": "325:18425:16"
      }
    ],
    "src": "299:18452:16"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-09T03:45:29.449Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}