{
  "contractName": "Slices",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/libs/Slices.sol\":\"Slices\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/libs/Slices.sol\":{\"keccak256\":\"0x9d046fa558be922c9625a1fdc470f6e68b3c9b5745b6185cb4a4fc59181fa006\",\"license\":\"APACHE-2.0\",\"urls\":[\"bzz-raw://ab19ba09faf83aaa92947f0a0907f6522be89279a9a1b0e53d5393a23085947d\",\"dweb:/ipfs/QmeE9MwhpSFNTwyqDFpMFjftrJKR1edBhLjV3bdKQQHUVm\"]}},\"version\":1}",
  "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034fe14c8b25328bfcb02b0c149122aee94eb93ae34a50ac29bfcd2381db3577464736f6c63430008190033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034fe14c8b25328bfcb02b0c149122aee94eb93ae34a50ac29bfcd2381db3577464736f6c63430008190033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "2090:24418:63:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;2090:24418:63;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "2090:24418:63:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: APACHE-2.0\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\n/*\r\n * @title String & Slice utility library for Solidity contracts.\r\n * @author Nick Johnson <arachnid@notdot.net>\r\n *\r\n * @dev Functionality in this library is largely implemented using an\r\n *      abstraction called a 'Slice'. A Slice represents a part of a string -\r\n *      anything from the entire string to a single character, or even no\r\n *      characters at all (a 0-length Slice). Since a Slice only has to specify\r\n *      an offset and a length, copying and manipulating slices is a lot less\r\n *      expensive than copying and manipulating the strings they reference.\r\n *\r\n *      To further reduce gas costs, most functions on Slice that need to return\r\n *      a Slice modify the original one instead of allocating a new one; for\r\n *      instance, `s.split(\".\")` will return the text up to the first '.',\r\n *      modifying s to only contain the remainder of the string after the '.'.\r\n *      In situations where you do not want to modify the original Slice, you\r\n *      can make a copy first with `.copy()`, for example:\r\n *      `s.copy().split(\".\")`. Try and avoid using this idiom in loops; since\r\n *      Solidity has no memory management, it will result in allocating many\r\n *      short-lived slices that are later discarded.\r\n *\r\n *      Functions that return two slices come in two versions: a non-allocating\r\n *      version that takes the second Slice as an argument, modifying it in\r\n *      place, and an allocating version that allocates and returns the second\r\n *      Slice; see `nextRune` for example.\r\n *\r\n *      Functions that have to copy string data will return strings rather than\r\n *      slices; these can be cast back to slices for further processing if\r\n *      required.\r\n *\r\n *      For convenience, some functions are provided with non-modifying\r\n *      variants that create a new Slice and return both; for instance,\r\n *      `s.splitNew('.')` leaves s unmodified, and returns two values\r\n *      corresponding to the left and right parts of the string.\r\n */\r\n\r\nlibrary Slices {\r\n    \r\n    struct Slice {\r\n        uint _len;\r\n        uint _ptr;\r\n    }\r\n\r\n    function _memcpy(uint _dest, uint _src, uint _len) private pure {\r\n        // Copy word-length chunks while possible\r\n        for(; _len >= 32; _len -= 32) {\r\n            assembly {\r\n                mstore(_dest, mload(_src))\r\n            }\r\n            _dest += 32;\r\n            _src += 32;\r\n        }\r\n\r\n        // Copy remaining bytes\r\n        uint _mask = type(uint).max;\r\n        if (_len > 0) {\r\n            _mask = 256 ** (32 - _len) - 1;\r\n        }\r\n        assembly {\r\n            let srcpart := and(mload(_src), not(_mask))\r\n            let destpart := and(mload(_dest), _mask)\r\n            mstore(_dest, or(destpart, srcpart))\r\n        }\r\n    }\r\n\r\n    /*\r\n     * @dev Returns a Slice containing the entire string.\r\n     * @param self The string to make a Slice from.\r\n     * @return A newly allocated Slice containing the entire string.\r\n     */\r\n    function toSlice(string memory self) internal pure returns (Slice memory) {\r\n        uint ptr;\r\n        assembly {\r\n            ptr := add(self, 0x20)\r\n        }\r\n        return Slice(bytes(self).length, ptr);\r\n    }\r\n\r\n    /*\r\n     * @dev Returns the length of a null-terminated bytes32 string.\r\n     * @param self The value to find the length of.\r\n     * @return The length of the string, from 0 to 32.\r\n     */\r\n    function len(bytes32 self) internal pure returns (uint) {\r\n        uint ret;\r\n        if (self == 0)\r\n            return 0;\r\n        if (uint(self) & type(uint128).max == 0) {\r\n            ret += 16;\r\n            self = bytes32(uint(self) / 0x100000000000000000000000000000000);\r\n        }\r\n        if (uint(self) & type(uint64).max == 0) {\r\n            ret += 8;\r\n            self = bytes32(uint(self) / 0x10000000000000000);\r\n        }\r\n        if (uint(self) & type(uint32).max == 0) {\r\n            ret += 4;\r\n            self = bytes32(uint(self) / 0x100000000);\r\n        }\r\n        if (uint(self) & type(uint16).max == 0) {\r\n            ret += 2;\r\n            self = bytes32(uint(self) / 0x10000);\r\n        }\r\n        if (uint(self) & type(uint8).max == 0) {\r\n            ret += 1;\r\n        }\r\n        return 32 - ret;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns a Slice containing the entire bytes32, interpreted as a\r\n     *      null-terminated utf-8 string.\r\n     * @param self The bytes32 value to convert to a Slice.\r\n     * @return A new Slice containing the value of the input argument up to the\r\n     *         first null.\r\n     */\r\n    function toSliceB32(bytes32 self) internal pure returns (Slice memory ret) {\r\n        // Allocate space for `self` in memory, copy it there, and point ret at it\r\n        assembly {\r\n            let ptr := mload(0x40)\r\n            mstore(0x40, add(ptr, 0x20))\r\n            mstore(ptr, self)\r\n            mstore(add(ret, 0x20), ptr)\r\n        }\r\n        ret._len = len(self);\r\n    }\r\n\r\n    /*\r\n     * @dev Returns a new Slice containing the same data as the current Slice.\r\n     * @param self The Slice to copy.\r\n     * @return A new Slice containing the same data as `self`.\r\n     */\r\n    function copy(Slice memory self) internal pure returns (Slice memory) {\r\n        return Slice(self._len, self._ptr);\r\n    }\r\n\r\n    /*\r\n     * @dev Copies a Slice to a new string.\r\n     * @param self The Slice to copy.\r\n     * @return A newly allocated string containing the Slice's text.\r\n     */\r\n    function toString(Slice memory self) internal pure returns (string memory) {\r\n        string memory ret = new string(self._len);\r\n        uint retptr;\r\n        assembly { retptr := add(ret, 32) }\r\n\r\n        _memcpy(retptr, self._ptr, self._len);\r\n        return ret;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns the length in runes of the Slice. Note that this operation\r\n     *      takes time proportional to the length of the Slice; avoid using it\r\n     *      in loops, and call `Slice.empty()` if you only need to know whether\r\n     *      the Slice is empty or not.\r\n     * @param self The Slice to operate on.\r\n     * @return The length of the Slice in runes.\r\n     */\r\n    function len(Slice memory self) internal pure returns (uint _l) {\r\n        // Starting at ptr-31 means the LSB will be the byte we care about\r\n        uint ptr = self._ptr - 31;\r\n        uint end = ptr + self._len;\r\n        for (_l = 0; ptr < end; _l++) {\r\n            uint8 b;\r\n            assembly { b := and(mload(ptr), 0xFF) }\r\n            if (b < 0x80) {\r\n                ptr += 1;\r\n            } else if(b < 0xE0) {\r\n                ptr += 2;\r\n            } else if(b < 0xF0) {\r\n                ptr += 3;\r\n            } else if(b < 0xF8) {\r\n                ptr += 4;\r\n            } else if(b < 0xFC) {\r\n                ptr += 5;\r\n            } else {\r\n                ptr += 6;\r\n            }\r\n        }\r\n    }\r\n\r\n    /*\r\n     * @dev Returns true if the Slice is empty (has a length of 0).\r\n     * @param self The Slice to operate on.\r\n     * @return True if the Slice is empty, False otherwise.\r\n     */\r\n    function empty(Slice memory self) internal pure returns (bool) {\r\n        return self._len == 0;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns a positive number if `other` comes lexicographically after\r\n     *      `self`, a negative number if it comes before, or zero if the\r\n     *      contents of the two slices are equal. Comparison is done per-rune,\r\n     *      on unicode codepoints.\r\n     * @param self The first Slice to compare.\r\n     * @param other The second Slice to compare.\r\n     * @return The result of the comparison.\r\n     */\r\n    function compare(Slice memory self, Slice memory other) internal pure returns (int) {\r\n        uint shortest = self._len;\r\n        if (other._len < self._len)\r\n            shortest = other._len;\r\n\r\n        uint selfptr = self._ptr;\r\n        uint otherptr = other._ptr;\r\n        for (uint idx = 0; idx < shortest; idx += 32) {\r\n            uint a;\r\n            uint b;\r\n            assembly {\r\n                a := mload(selfptr)\r\n                b := mload(otherptr)\r\n            }\r\n            if (a != b) {\r\n                // Mask out irrelevant bytes and check again\r\n                uint mask = type(uint).max; // 0xffff...\r\n                if(shortest < 32) {\r\n                  mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);\r\n                }\r\n                unchecked {\r\n                    uint diff = (a & mask) - (b & mask);\r\n                    if (diff != 0)\r\n                        return int(diff);\r\n                }\r\n            }\r\n            selfptr += 32;\r\n            otherptr += 32;\r\n        }\r\n        return int(self._len) - int(other._len);\r\n    }\r\n\r\n    /*\r\n     * @dev Returns true if the two slices contain the same text.\r\n     * @param self The first Slice to compare.\r\n     * @param self The second Slice to compare.\r\n     * @return True if the slices are equal, false otherwise.\r\n     */\r\n    function equals(Slice memory self, Slice memory other) internal pure returns (bool) {\r\n        return compare(self, other) == 0;\r\n    }\r\n\r\n    /*\r\n     * @dev Extracts the first rune in the Slice into `rune`, advancing the\r\n     *      Slice to point to the next rune and returning `self`.\r\n     * @param self The Slice to operate on.\r\n     * @param rune The Slice that will contain the first rune.\r\n     * @return `rune`.\r\n     */\r\n    function nextRune(Slice memory self, Slice memory rune) internal pure returns (Slice memory) {\r\n        rune._ptr = self._ptr;\r\n\r\n        if (self._len == 0) {\r\n            rune._len = 0;\r\n            return rune;\r\n        }\r\n\r\n        uint _l;\r\n        uint _b;\r\n        // Load the first byte of the rune into the LSBs of _b\r\n        assembly { _b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }\r\n        if (_b < 0x80) {\r\n            _l = 1;\r\n        } else if(_b < 0xE0) {\r\n            _l = 2;\r\n        } else if(_b < 0xF0) {\r\n            _l = 3;\r\n        } else {\r\n            _l = 4;\r\n        }\r\n\r\n        // Check for truncated codepoints\r\n        if (_l > self._len) {\r\n            rune._len = self._len;\r\n            self._ptr += self._len;\r\n            self._len = 0;\r\n            return rune;\r\n        }\r\n\r\n        self._ptr += _l;\r\n        self._len -= _l;\r\n        rune._len = _l;\r\n        return rune;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns the first rune in the Slice, advancing the Slice to point\r\n     *      to the next rune.\r\n     * @param self The Slice to operate on.\r\n     * @return A Slice containing only the first rune from `self`.\r\n     */\r\n    function nextRune(Slice memory self) internal pure returns (Slice memory ret) {\r\n        nextRune(self, ret);\r\n    }\r\n\r\n    /*\r\n     * @dev Returns the number of the first codepoint in the Slice.\r\n     * @param self The Slice to operate on.\r\n     * @return The number of the first codepoint in the Slice.\r\n     */\r\n    function ord(Slice memory self) internal pure returns (uint ret) {\r\n        if (self._len == 0) {\r\n            return 0;\r\n        }\r\n\r\n        uint word;\r\n        uint length;\r\n        uint divisor = 2 ** 248;\r\n\r\n        // Load the rune into the MSBs of b\r\n        assembly { word:= mload(mload(add(self, 32))) }\r\n        uint b = word / divisor;\r\n        if (b < 0x80) {\r\n            ret = b;\r\n            length = 1;\r\n        } else if(b < 0xE0) {\r\n            ret = b & 0x1F;\r\n            length = 2;\r\n        } else if(b < 0xF0) {\r\n            ret = b & 0x0F;\r\n            length = 3;\r\n        } else {\r\n            ret = b & 0x07;\r\n            length = 4;\r\n        }\r\n\r\n        // Check for truncated codepoints\r\n        if (length > self._len) {\r\n            return 0;\r\n        }\r\n\r\n        for (uint i = 1; i < length; i++) {\r\n            divisor = divisor / 256;\r\n            b = (word / divisor) & 0xFF;\r\n            if (b & 0xC0 != 0x80) {\r\n                // Invalid UTF-8 sequence\r\n                return 0;\r\n            }\r\n            ret = (ret * 64) | (b & 0x3F);\r\n        }\r\n\r\n        return ret;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns the keccak-256 hash of the Slice.\r\n     * @param self The Slice to hash.\r\n     * @return The hash of the Slice.\r\n     */\r\n    function keccak(Slice memory self) internal pure returns (bytes32 ret) {\r\n        assembly {\r\n            ret := keccak256(mload(add(self, 32)), mload(self))\r\n        }\r\n    }\r\n\r\n    /*\r\n     * @dev Returns true if `self` starts with `needle`.\r\n     * @param self The Slice to operate on.\r\n     * @param needle The Slice to search for.\r\n     * @return True if the Slice starts with the provided text, false otherwise.\r\n     */\r\n    function startsWith(Slice memory self, Slice memory needle) internal pure returns (bool) {\r\n        if (self._len < needle._len) {\r\n            return false;\r\n        }\r\n\r\n        if (self._ptr == needle._ptr) {\r\n            return true;\r\n        }\r\n\r\n        bool equal;\r\n        assembly {\r\n            let length := mload(needle)\r\n            let selfptr := mload(add(self, 0x20))\r\n            let needleptr := mload(add(needle, 0x20))\r\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\r\n        }\r\n        return equal;\r\n    }\r\n\r\n    /*\r\n     * @dev If `self` starts with `needle`, `needle` is removed from the\r\n     *      beginning of `self`. Otherwise, `self` is unmodified.\r\n     * @param self The Slice to operate on.\r\n     * @param needle The Slice to search for.\r\n     * @return `self`\r\n     */\r\n    function beyond(Slice memory self, Slice memory needle) internal pure returns (Slice memory) {\r\n        if (self._len < needle._len) {\r\n            return self;\r\n        }\r\n\r\n        bool equal = true;\r\n        if (self._ptr != needle._ptr) {\r\n            assembly {\r\n                let length := mload(needle)\r\n                let selfptr := mload(add(self, 0x20))\r\n                let needleptr := mload(add(needle, 0x20))\r\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\r\n            }\r\n        }\r\n\r\n        if (equal) {\r\n            self._len -= needle._len;\r\n            self._ptr += needle._len;\r\n        }\r\n\r\n        return self;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns true if the Slice ends with `needle`.\r\n     * @param self The Slice to operate on.\r\n     * @param needle The Slice to search for.\r\n     * @return True if the Slice starts with the provided text, false otherwise.\r\n     */\r\n    function endsWith(Slice memory self, Slice memory needle) internal pure returns (bool) {\r\n        if (self._len < needle._len) {\r\n            return false;\r\n        }\r\n\r\n        uint selfptr = self._ptr + self._len - needle._len;\r\n\r\n        if (selfptr == needle._ptr) {\r\n            return true;\r\n        }\r\n\r\n        bool equal;\r\n        assembly {\r\n            let length := mload(needle)\r\n            let needleptr := mload(add(needle, 0x20))\r\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\r\n        }\r\n\r\n        return equal;\r\n    }\r\n\r\n    /*\r\n     * @dev If `self` ends with `needle`, `needle` is removed from the\r\n     *      end of `self`. Otherwise, `self` is unmodified.\r\n     * @param self The Slice to operate on.\r\n     * @param needle The Slice to search for.\r\n     * @return `self`\r\n     */\r\n    function until(Slice memory self, Slice memory needle) internal pure returns (Slice memory) {\r\n        if (self._len < needle._len) {\r\n            return self;\r\n        }\r\n\r\n        uint selfptr = self._ptr + self._len - needle._len;\r\n        bool equal = true;\r\n        if (selfptr != needle._ptr) {\r\n            assembly {\r\n                let length := mload(needle)\r\n                let needleptr := mload(add(needle, 0x20))\r\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\r\n            }\r\n        }\r\n\r\n        if (equal) {\r\n            self._len -= needle._len;\r\n        }\r\n\r\n        return self;\r\n    }\r\n\r\n    // Returns the memory address of the first byte of the first occurrence of\r\n    // `needle` in `self`, or the first byte after `self` if not found.\r\n    function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\r\n        uint ptr = selfptr;\r\n        uint idx;\r\n\r\n        if (needlelen <= selflen) {\r\n            if (needlelen <= 32) {\r\n                bytes32 mask;\r\n                if (needlelen > 0) {\r\n                    mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\r\n                }\r\n\r\n                bytes32 needledata;\r\n                assembly { needledata := and(mload(needleptr), mask) }\r\n\r\n                uint end = selfptr + selflen - needlelen;\r\n                bytes32 ptrdata;\r\n                assembly { ptrdata := and(mload(ptr), mask) }\r\n\r\n                while (ptrdata != needledata) {\r\n                    if (ptr >= end)\r\n                        return selfptr + selflen;\r\n                    ptr++;\r\n                    assembly { ptrdata := and(mload(ptr), mask) }\r\n                }\r\n                return ptr;\r\n            } else {\r\n                // For long needles, use hashing\r\n                bytes32 hash;\r\n                assembly { hash := keccak256(needleptr, needlelen) }\r\n\r\n                for (idx = 0; idx <= selflen - needlelen; idx++) {\r\n                    bytes32 testHash;\r\n                    assembly { testHash := keccak256(ptr, needlelen) }\r\n                    if (hash == testHash)\r\n                        return ptr;\r\n                    ptr += 1;\r\n                }\r\n            }\r\n        }\r\n        return selfptr + selflen;\r\n    }\r\n\r\n    // Returns the memory address of the first byte after the last occurrence of\r\n    // `needle` in `self`, or the address of `self` if not found.\r\n    function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\r\n        uint ptr;\r\n\r\n        if (needlelen <= selflen) {\r\n            if (needlelen <= 32) {\r\n                bytes32 mask;\r\n                if (needlelen > 0) {\r\n                    mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\r\n                }\r\n\r\n                bytes32 needledata;\r\n                assembly { needledata := and(mload(needleptr), mask) }\r\n\r\n                ptr = selfptr + selflen - needlelen;\r\n                bytes32 ptrdata;\r\n                assembly { ptrdata := and(mload(ptr), mask) }\r\n\r\n                while (ptrdata != needledata) {\r\n                    if (ptr <= selfptr)\r\n                        return selfptr;\r\n                    ptr--;\r\n                    assembly { ptrdata := and(mload(ptr), mask) }\r\n                }\r\n                return ptr + needlelen;\r\n            } else {\r\n                // For long needles, use hashing\r\n                bytes32 hash;\r\n                assembly { hash := keccak256(needleptr, needlelen) }\r\n                ptr = selfptr + (selflen - needlelen);\r\n                while (ptr >= selfptr) {\r\n                    bytes32 testHash;\r\n                    assembly { testHash := keccak256(ptr, needlelen) }\r\n                    if (hash == testHash)\r\n                        return ptr + needlelen;\r\n                    ptr -= 1;\r\n                }\r\n            }\r\n        }\r\n        return selfptr;\r\n    }\r\n\r\n    /*\r\n     * @dev Modifies `self` to contain everything from the first occurrence of\r\n     *      `needle` to the end of the Slice. `self` is set to the empty Slice\r\n     *      if `needle` is not found.\r\n     * @param self The Slice to search and modify.\r\n     * @param needle The text to search for.\r\n     * @return `self`.\r\n     */\r\n    function find(Slice memory self, Slice memory needle) internal pure returns (Slice memory) {\r\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\r\n        self._len -= ptr - self._ptr;\r\n        self._ptr = ptr;\r\n        return self;\r\n    }\r\n\r\n    /*\r\n     * @dev Modifies `self` to contain the part of the string from the start of\r\n     *      `self` to the end of the first occurrence of `needle`. If `needle`\r\n     *      is not found, `self` is set to the empty Slice.\r\n     * @param self The Slice to search and modify.\r\n     * @param needle The text to search for.\r\n     * @return `self`.\r\n     */\r\n    function rfind(Slice memory self, Slice memory needle) internal pure returns (Slice memory) {\r\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\r\n        self._len = ptr - self._ptr;\r\n        return self;\r\n    }\r\n\r\n    /*\r\n     * @dev Splits the Slice, setting `self` to everything after the first\r\n     *      occurrence of `needle`, and `token` to everything before it. If\r\n     *      `needle` does not occur in `self`, `self` is set to the empty Slice,\r\n     *      and `token` is set to the entirety of `self`.\r\n     * @param self The Slice to split.\r\n     * @param needle The text to search for in `self`.\r\n     * @param token An output parameter to which the first token is written.\r\n     * @return `token`.\r\n     */\r\n    function split(Slice memory self, Slice memory needle, Slice memory token) internal pure returns (Slice memory) {\r\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\r\n        token._ptr = self._ptr;\r\n        token._len = ptr - self._ptr;\r\n        if (ptr == self._ptr + self._len) {\r\n            // Not found\r\n            self._len = 0;\r\n        } else {\r\n            self._len -= token._len + needle._len;\r\n            self._ptr = ptr + needle._len;\r\n        }\r\n        return token;\r\n    }\r\n\r\n    /*\r\n     * @dev Splits the Slice, setting `self` to everything after the first\r\n     *      occurrence of `needle`, and returning everything before it. If\r\n     *      `needle` does not occur in `self`, `self` is set to the empty Slice,\r\n     *      and the entirety of `self` is returned.\r\n     * @param self The Slice to split.\r\n     * @param needle The text to search for in `self`.\r\n     * @return The part of `self` up to the first occurrence of `delim`.\r\n     */\r\n    function split(Slice memory self, Slice memory needle) internal pure returns (Slice memory token) {\r\n        split(self, needle, token);\r\n    }\r\n\r\n    /*\r\n     * @dev Splits the Slice, setting `self` to everything before the last\r\n     *      occurrence of `needle`, and `token` to everything after it. If\r\n     *      `needle` does not occur in `self`, `self` is set to the empty Slice,\r\n     *      and `token` is set to the entirety of `self`.\r\n     * @param self The Slice to split.\r\n     * @param needle The text to search for in `self`.\r\n     * @param token An output parameter to which the first token is written.\r\n     * @return `token`.\r\n     */\r\n    function rsplit(Slice memory self, Slice memory needle, Slice memory token) internal pure returns (Slice memory) {\r\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\r\n        token._ptr = ptr;\r\n        token._len = self._len - (ptr - self._ptr);\r\n        if (ptr == self._ptr) {\r\n            // Not found\r\n            self._len = 0;\r\n        } else {\r\n            self._len -= token._len + needle._len;\r\n        }\r\n        return token;\r\n    }\r\n\r\n    /*\r\n     * @dev Splits the Slice, setting `self` to everything before the last\r\n     *      occurrence of `needle`, and returning everything after it. If\r\n     *      `needle` does not occur in `self`, `self` is set to the empty Slice,\r\n     *      and the entirety of `self` is returned.\r\n     * @param self The Slice to split.\r\n     * @param needle The text to search for in `self`.\r\n     * @return The part of `self` after the last occurrence of `delim`.\r\n     */\r\n    function rsplit(Slice memory self, Slice memory needle) internal pure returns (Slice memory token) {\r\n        rsplit(self, needle, token);\r\n    }\r\n\r\n    /*\r\n     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.\r\n     * @param self The Slice to search.\r\n     * @param needle The text to search for in `self`.\r\n     * @return The number of occurrences of `needle` found in `self`.\r\n     */\r\n    function count(Slice memory self, Slice memory needle) internal pure returns (uint cnt) {\r\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;\r\n        while (ptr <= self._ptr + self._len) {\r\n            cnt++;\r\n            ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len;\r\n        }\r\n    }\r\n\r\n    /*\r\n     * @dev Returns True if `self` contains `needle`.\r\n     * @param self The Slice to search.\r\n     * @param needle The text to search for in `self`.\r\n     * @return True if `needle` is found in `self`, false otherwise.\r\n     */\r\n    function contains(Slice memory self, Slice memory needle) internal pure returns (bool) {\r\n        return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;\r\n    }\r\n\r\n    /*\r\n     * @dev Returns a newly allocated string containing the concatenation of\r\n     *      `self` and `other`.\r\n     * @param self The first Slice to concatenate.\r\n     * @param other The second Slice to concatenate.\r\n     * @return The concatenation of the two strings.\r\n     */\r\n    function concat(Slice memory self, Slice memory other) internal pure returns (string memory) {\r\n        string memory ret = new string(self._len + other._len);\r\n        uint retptr;\r\n        assembly { retptr := add(ret, 32) }\r\n        _memcpy(retptr, self._ptr, self._len);\r\n        _memcpy(retptr + self._len, other._ptr, other._len);\r\n        return ret;\r\n    }\r\n\r\n    /*\r\n     * @dev Joins an array of slices, using `self` as a delimiter, returning a\r\n     *      newly allocated string.\r\n     * @param self The delimiter to use.\r\n     * @param parts A list of slices to join.\r\n     * @return A newly allocated string containing all the slices in `parts`,\r\n     *         joined with `self`.\r\n     */\r\n    function join(Slice memory self, Slice[] memory parts) internal pure returns (string memory) {\r\n        if (parts.length == 0)\r\n            return \"\";\r\n\r\n        uint length = self._len * (parts.length - 1);\r\n        for(uint i = 0; i < parts.length; i++)\r\n            length += parts[i]._len;\r\n\r\n        string memory ret = new string(length);\r\n        uint retptr;\r\n        assembly { retptr := add(ret, 32) }\r\n\r\n        for(uint i = 0; i < parts.length; i++) {\r\n            _memcpy(retptr, parts[i]._ptr, parts[i]._len);\r\n            retptr += parts[i]._len;\r\n            if (i < parts.length - 1) {\r\n                _memcpy(retptr, self._ptr, self._len);\r\n                retptr += self._len;\r\n            }\r\n        }\r\n\r\n        return ret;\r\n    }\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\libs\\Slices.sol",
  "ast": {
    "absolutePath": "project:/contracts/libs/Slices.sol",
    "exportedSymbols": {
      "Slices": [
        15980
      ]
    },
    "id": 15981,
    "license": "APACHE-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14151,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:31:63"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "Slices",
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 15980,
        "linearizedBaseContracts": [
          15980
        ],
        "name": "Slices",
        "nameLocation": "2098:6:63",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Slices.Slice",
            "id": 14156,
            "members": [
              {
                "constant": false,
                "id": 14153,
                "mutability": "mutable",
                "name": "_len",
                "nameLocation": "2147:4:63",
                "nodeType": "VariableDeclaration",
                "scope": 14156,
                "src": "2142:9:63",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 14152,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2142:4:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 14155,
                "mutability": "mutable",
                "name": "_ptr",
                "nameLocation": "2167:4:63",
                "nodeType": "VariableDeclaration",
                "scope": 14156,
                "src": "2162:9:63",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 14154,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2162:4:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Slice",
            "nameLocation": "2125:5:63",
            "nodeType": "StructDefinition",
            "scope": 15980,
            "src": "2118:61:63",
            "visibility": "public"
          },
          {
            "body": {
              "id": 14208,
              "nodeType": "Block",
              "src": "2251:591:63",
              "statements": [
                {
                  "body": {
                    "id": 14181,
                    "nodeType": "Block",
                    "src": "2343:146:63",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2367:60:63",
                          "nodeType": "YulBlock",
                          "src": "2367:60:63",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "_dest",
                                    "nativeSrc": "2393:5:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "2393:5:63"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_src",
                                        "nativeSrc": "2406:4:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "2406:4:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "2400:5:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "2400:5:63"
                                    },
                                    "nativeSrc": "2400:11:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2400:11:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "2386:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2386:6:63"
                                },
                                "nativeSrc": "2386:26:63",
                                "nodeType": "YulFunctionCall",
                                "src": "2386:26:63"
                              },
                              "nativeSrc": "2386:26:63",
                              "nodeType": "YulExpressionStatement",
                              "src": "2386:26:63"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 14158,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2393:5:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 14160,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2406:4:63",
                            "valueSize": 1
                          }
                        ],
                        "id": 14172,
                        "nodeType": "InlineAssembly",
                        "src": "2358:69:63"
                      },
                      {
                        "expression": {
                          "id": 14175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14173,
                            "name": "_dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14158,
                            "src": "2441:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 14174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2450:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2441:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14176,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:11:63"
                      },
                      {
                        "expression": {
                          "id": 14179,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14177,
                            "name": "_src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14160,
                            "src": "2467:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 14178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2475:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2467:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14180,
                        "nodeType": "ExpressionStatement",
                        "src": "2467:10:63"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14165,
                      "name": "_len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14162,
                      "src": "2319:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 14166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2327:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2319:10:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14182,
                  "isSimpleCounterLoop": false,
                  "loopExpression": {
                    "expression": {
                      "id": 14170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 14168,
                        "name": "_len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14162,
                        "src": "2331:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 14169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2339:2:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2331:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14171,
                    "nodeType": "ExpressionStatement",
                    "src": "2331:10:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "2313:176:63"
                },
                {
                  "assignments": [
                    14184
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14184,
                      "mutability": "mutable",
                      "name": "_mask",
                      "nameLocation": "2539:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14208,
                      "src": "2534:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14183,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2534:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14190,
                  "initialValue": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 14187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2552:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14186,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "2552:4:63",
                            "typeDescriptions": {}
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "id": 14185,
                        "name": "type",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967269,
                        "src": "2547:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2547:10:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_meta_type_t_uint256",
                        "typeString": "type(uint256)"
                      }
                    },
                    "id": 14189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "2558:3:63",
                    "memberName": "max",
                    "nodeType": "MemberAccess",
                    "src": "2547:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2534:27:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14191,
                      "name": "_len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14162,
                      "src": "2576:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14192,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2583:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2576:8:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14206,
                  "nodeType": "IfStatement",
                  "src": "2572:71:63",
                  "trueBody": {
                    "id": 14205,
                    "nodeType": "Block",
                    "src": "2586:57:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14194,
                            "name": "_mask",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14184,
                            "src": "2601:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "323536",
                                "id": 14195,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2609:3:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                },
                                "value": "256"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 14198,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "3332",
                                      "id": 14196,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2617:2:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 14197,
                                      "name": "_len",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14162,
                                      "src": "2622:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "2617:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 14199,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2616:11:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2609:18:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 14201,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2630:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2609:22:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2601:30:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14204,
                        "nodeType": "ExpressionStatement",
                        "src": "2601:30:63"
                      }
                    ]
                  }
                },
                {
                  "AST": {
                    "nativeSrc": "2662:173:63",
                    "nodeType": "YulBlock",
                    "src": "2662:173:63",
                    "statements": [
                      {
                        "nativeSrc": "2677:43:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "2677:43:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_src",
                                  "nativeSrc": "2702:4:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2702:4:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "2696:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "2696:5:63"
                              },
                              "nativeSrc": "2696:11:63",
                              "nodeType": "YulFunctionCall",
                              "src": "2696:11:63"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "_mask",
                                  "nativeSrc": "2713:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2713:5:63"
                                }
                              ],
                              "functionName": {
                                "name": "not",
                                "nativeSrc": "2709:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "2709:3:63"
                              },
                              "nativeSrc": "2709:10:63",
                              "nodeType": "YulFunctionCall",
                              "src": "2709:10:63"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nativeSrc": "2692:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "2692:3:63"
                          },
                          "nativeSrc": "2692:28:63",
                          "nodeType": "YulFunctionCall",
                          "src": "2692:28:63"
                        },
                        "variables": [
                          {
                            "name": "srcpart",
                            "nativeSrc": "2681:7:63",
                            "nodeType": "YulTypedName",
                            "src": "2681:7:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "2734:40:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "2734:40:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_dest",
                                  "nativeSrc": "2760:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2760:5:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "2754:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "2754:5:63"
                              },
                              "nativeSrc": "2754:12:63",
                              "nodeType": "YulFunctionCall",
                              "src": "2754:12:63"
                            },
                            {
                              "name": "_mask",
                              "nativeSrc": "2768:5:63",
                              "nodeType": "YulIdentifier",
                              "src": "2768:5:63"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nativeSrc": "2750:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "2750:3:63"
                          },
                          "nativeSrc": "2750:24:63",
                          "nodeType": "YulFunctionCall",
                          "src": "2750:24:63"
                        },
                        "variables": [
                          {
                            "name": "destpart",
                            "nativeSrc": "2738:8:63",
                            "nodeType": "YulTypedName",
                            "src": "2738:8:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "_dest",
                              "nativeSrc": "2795:5:63",
                              "nodeType": "YulIdentifier",
                              "src": "2795:5:63"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "destpart",
                                  "nativeSrc": "2805:8:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2805:8:63"
                                },
                                {
                                  "name": "srcpart",
                                  "nativeSrc": "2815:7:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "2815:7:63"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nativeSrc": "2802:2:63",
                                "nodeType": "YulIdentifier",
                                "src": "2802:2:63"
                              },
                              "nativeSrc": "2802:21:63",
                              "nodeType": "YulFunctionCall",
                              "src": "2802:21:63"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "2788:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "2788:6:63"
                          },
                          "nativeSrc": "2788:36:63",
                          "nodeType": "YulFunctionCall",
                          "src": "2788:36:63"
                        },
                        "nativeSrc": "2788:36:63",
                        "nodeType": "YulExpressionStatement",
                        "src": "2788:36:63"
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14158,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2760:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14158,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2795:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14184,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2713:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14184,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2768:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14160,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2702:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14207,
                  "nodeType": "InlineAssembly",
                  "src": "2653:182:63"
                }
              ]
            },
            "id": 14209,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_memcpy",
            "nameLocation": "2196:7:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14158,
                  "mutability": "mutable",
                  "name": "_dest",
                  "nameLocation": "2209:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14209,
                  "src": "2204:10:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14157,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2204:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14160,
                  "mutability": "mutable",
                  "name": "_src",
                  "nameLocation": "2221:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14209,
                  "src": "2216:9:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14159,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2216:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14162,
                  "mutability": "mutable",
                  "name": "_len",
                  "nameLocation": "2232:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14209,
                  "src": "2227:9:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14161,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2227:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2203:34:63"
            },
            "returnParameters": {
              "id": 14164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2251:0:63"
            },
            "scope": 15980,
            "src": "2187:655:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 14230,
              "nodeType": "Block",
              "src": "3123:142:63",
              "statements": [
                {
                  "assignments": [
                    14218
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14218,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "3139:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14230,
                      "src": "3134:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14217,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3134:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14219,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3134:8:63"
                },
                {
                  "AST": {
                    "nativeSrc": "3162:48:63",
                    "nodeType": "YulBlock",
                    "src": "3162:48:63",
                    "statements": [
                      {
                        "nativeSrc": "3177:22:63",
                        "nodeType": "YulAssignment",
                        "src": "3177:22:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "self",
                              "nativeSrc": "3188:4:63",
                              "nodeType": "YulIdentifier",
                              "src": "3188:4:63"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3194:4:63",
                              "nodeType": "YulLiteral",
                              "src": "3194:4:63",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "3184:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "3184:3:63"
                          },
                          "nativeSrc": "3184:15:63",
                          "nodeType": "YulFunctionCall",
                          "src": "3184:15:63"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nativeSrc": "3177:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "3177:3:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14218,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3177:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14211,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3188:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14220,
                  "nodeType": "InlineAssembly",
                  "src": "3153:57:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14224,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14211,
                              "src": "3239:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 14223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3233:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 14222,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3233:5:63",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3233:11:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 14226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3245:6:63",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "3233:18:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 14227,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14218,
                        "src": "3253:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14221,
                      "name": "Slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14156,
                      "src": "3227:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Slice_$14156_storage_ptr_$",
                        "typeString": "type(struct Slices.Slice storage pointer)"
                      }
                    },
                    "id": 14228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3227:30:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 14216,
                  "id": 14229,
                  "nodeType": "Return",
                  "src": "3220:37:63"
                }
              ]
            },
            "id": 14231,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSlice",
            "nameLocation": "3058:7:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14211,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "3080:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14231,
                  "src": "3066:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14210,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3066:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3065:20:63"
            },
            "returnParameters": {
              "id": 14216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14215,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14231,
                  "src": "3109:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14214,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14213,
                      "name": "Slice",
                      "nameLocations": [
                        "3109:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "3109:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "3109:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3108:14:63"
            },
            "scope": 15980,
            "src": "3049:216:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14389,
              "nodeType": "Block",
              "src": "3524:774:63",
              "statements": [
                {
                  "assignments": [
                    14239
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14239,
                      "mutability": "mutable",
                      "name": "ret",
                      "nameLocation": "3540:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14389,
                      "src": "3535:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14238,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3535:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14240,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3535:8:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 14243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14241,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14233,
                      "src": "3558:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3566:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3558:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14246,
                  "nodeType": "IfStatement",
                  "src": "3554:36:63",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 14244,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3589:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 14237,
                    "id": 14245,
                    "nodeType": "Return",
                    "src": "3582:8:63"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14256,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 14249,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3610:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 14248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3605:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14247,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3605:4:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14250,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3605:10:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3623:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              },
                              "typeName": {
                                "id": 14252,
                                "name": "uint128",
                                "nodeType": "ElementaryTypeName",
                                "src": "3623:7:63",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint128_$",
                                "typeString": "type(uint128)"
                              }
                            ],
                            "id": 14251,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "3618:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 14254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3618:13:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint128",
                            "typeString": "type(uint128)"
                          }
                        },
                        "id": 14255,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "3632:3:63",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "3618:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "3605:30:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3639:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3605:35:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14276,
                  "nodeType": "IfStatement",
                  "src": "3601:156:63",
                  "trueBody": {
                    "id": 14275,
                    "nodeType": "Block",
                    "src": "3642:115:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14259,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14239,
                            "src": "3657:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3136",
                            "id": 14260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3664:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3657:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14262,
                        "nodeType": "ExpressionStatement",
                        "src": "3657:9:63"
                      },
                      {
                        "expression": {
                          "id": 14273,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14263,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3681:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14271,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 14268,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14233,
                                      "src": "3701:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 14267,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3696:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 14266,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3696:4:63",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 14269,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3696:10:63",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 14270,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3709:35:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3696:48:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 14265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3688:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 14264,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3688:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14272,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3688:57:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3681:64:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14274,
                        "nodeType": "ExpressionStatement",
                        "src": "3681:64:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 14279,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3776:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 14278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3771:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14277,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3771:4:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3771:10:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3789:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 14282,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "3789:6:63",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              }
                            ],
                            "id": 14281,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "3784:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 14284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3784:12:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint64",
                            "typeString": "type(uint64)"
                          }
                        },
                        "id": 14285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "3797:3:63",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "3784:16:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "src": "3771:29:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3804:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3771:34:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14306,
                  "nodeType": "IfStatement",
                  "src": "3767:138:63",
                  "trueBody": {
                    "id": 14305,
                    "nodeType": "Block",
                    "src": "3807:98:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14289,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14239,
                            "src": "3822:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "38",
                            "id": 14290,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3829:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3822:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14292,
                        "nodeType": "ExpressionStatement",
                        "src": "3822:8:63"
                      },
                      {
                        "expression": {
                          "id": 14303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14293,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3845:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 14298,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14233,
                                      "src": "3865:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 14297,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3860:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 14296,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3860:4:63",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 14299,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3860:10:63",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 14300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3873:19:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3860:32:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 14295,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3852:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 14294,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3852:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3852:41:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3845:48:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14304,
                        "nodeType": "ExpressionStatement",
                        "src": "3845:48:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14318,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 14309,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3924:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 14308,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3919:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14307,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3919:4:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14310,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3919:10:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3937:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              },
                              "typeName": {
                                "id": 14312,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3937:6:63",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint32_$",
                                "typeString": "type(uint32)"
                              }
                            ],
                            "id": 14311,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "3932:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 14314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3932:12:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint32",
                            "typeString": "type(uint32)"
                          }
                        },
                        "id": 14315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "3945:3:63",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "3932:16:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "3919:29:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3952:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3919:34:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14336,
                  "nodeType": "IfStatement",
                  "src": "3915:130:63",
                  "trueBody": {
                    "id": 14335,
                    "nodeType": "Block",
                    "src": "3955:90:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14319,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14239,
                            "src": "3970:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "34",
                            "id": 14320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3977:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3970:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14322,
                        "nodeType": "ExpressionStatement",
                        "src": "3970:8:63"
                      },
                      {
                        "expression": {
                          "id": 14333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14323,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "3993:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14331,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 14328,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14233,
                                      "src": "4013:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 14327,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4008:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 14326,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4008:4:63",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 14329,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4008:10:63",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030",
                                  "id": 14330,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4021:11:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "4008:24:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 14325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4000:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 14324,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "4000:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4000:33:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3993:40:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14334,
                        "nodeType": "ExpressionStatement",
                        "src": "3993:40:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 14339,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "4064:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 14338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4059:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14337,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4059:4:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4059:10:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14343,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4077:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint16_$",
                                "typeString": "type(uint16)"
                              },
                              "typeName": {
                                "id": 14342,
                                "name": "uint16",
                                "nodeType": "ElementaryTypeName",
                                "src": "4077:6:63",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint16_$",
                                "typeString": "type(uint16)"
                              }
                            ],
                            "id": 14341,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "4072:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 14344,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4072:12:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint16",
                            "typeString": "type(uint16)"
                          }
                        },
                        "id": 14345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4085:3:63",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "4072:16:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "4059:29:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14347,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4092:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4059:34:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14366,
                  "nodeType": "IfStatement",
                  "src": "4055:126:63",
                  "trueBody": {
                    "id": 14365,
                    "nodeType": "Block",
                    "src": "4095:86:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14349,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14239,
                            "src": "4110:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "32",
                            "id": 14350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4117:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "4110:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14352,
                        "nodeType": "ExpressionStatement",
                        "src": "4110:8:63"
                      },
                      {
                        "expression": {
                          "id": 14363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14353,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "4133:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 14358,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14233,
                                      "src": "4153:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 14357,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4148:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 14356,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4148:4:63",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 14359,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4148:10:63",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030",
                                  "id": 14360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4161:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "4148:20:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 14355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4140:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 14354,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "4140:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14362,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4140:29:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4133:36:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14364,
                        "nodeType": "ExpressionStatement",
                        "src": "4133:36:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 14369,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14233,
                            "src": "4200:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 14368,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4195:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 14367,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4195:4:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14370,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4195:10:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4213:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint8_$",
                                "typeString": "type(uint8)"
                              },
                              "typeName": {
                                "id": 14372,
                                "name": "uint8",
                                "nodeType": "ElementaryTypeName",
                                "src": "4213:5:63",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_uint8_$",
                                "typeString": "type(uint8)"
                              }
                            ],
                            "id": 14371,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "4208:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 14374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4208:11:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_uint8",
                            "typeString": "type(uint8)"
                          }
                        },
                        "id": 14375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "4220:3:63",
                        "memberName": "max",
                        "nodeType": "MemberAccess",
                        "src": "4208:15:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "4195:28:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14377,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4227:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4195:33:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14384,
                  "nodeType": "IfStatement",
                  "src": "4191:74:63",
                  "trueBody": {
                    "id": 14383,
                    "nodeType": "Block",
                    "src": "4230:35:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14379,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14239,
                            "src": "4245:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 14380,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4252:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4245:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14382,
                        "nodeType": "ExpressionStatement",
                        "src": "4245:8:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14387,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3332",
                      "id": 14385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4282:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 14386,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14239,
                      "src": "4287:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4282:8:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14237,
                  "id": 14388,
                  "nodeType": "Return",
                  "src": "4275:15:63"
                }
              ]
            },
            "id": 14390,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nameLocation": "3477:3:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14234,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14233,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "3489:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14390,
                  "src": "3481:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14232,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3481:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3480:14:63"
            },
            "returnParameters": {
              "id": 14237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14236,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14390,
                  "src": "3518:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14235,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3518:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3517:6:63"
            },
            "scope": 15980,
            "src": "3468:830:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14407,
              "nodeType": "Block",
              "src": "4688:304:63",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "4792:162:63",
                    "nodeType": "YulBlock",
                    "src": "4792:162:63",
                    "statements": [
                      {
                        "nativeSrc": "4807:22:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "4807:22:63",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4824:4:63",
                              "nodeType": "YulLiteral",
                              "src": "4824:4:63",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "4818:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "4818:5:63"
                          },
                          "nativeSrc": "4818:11:63",
                          "nodeType": "YulFunctionCall",
                          "src": "4818:11:63"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nativeSrc": "4811:3:63",
                            "nodeType": "YulTypedName",
                            "src": "4811:3:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4850:4:63",
                              "nodeType": "YulLiteral",
                              "src": "4850:4:63",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "4860:3:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "4860:3:63"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "4865:4:63",
                                  "nodeType": "YulLiteral",
                                  "src": "4865:4:63",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "4856:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "4856:3:63"
                              },
                              "nativeSrc": "4856:14:63",
                              "nodeType": "YulFunctionCall",
                              "src": "4856:14:63"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4843:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "4843:6:63"
                          },
                          "nativeSrc": "4843:28:63",
                          "nodeType": "YulFunctionCall",
                          "src": "4843:28:63"
                        },
                        "nativeSrc": "4843:28:63",
                        "nodeType": "YulExpressionStatement",
                        "src": "4843:28:63"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "4892:3:63",
                              "nodeType": "YulIdentifier",
                              "src": "4892:3:63"
                            },
                            {
                              "name": "self",
                              "nativeSrc": "4897:4:63",
                              "nodeType": "YulIdentifier",
                              "src": "4897:4:63"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4885:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "4885:6:63"
                          },
                          "nativeSrc": "4885:17:63",
                          "nodeType": "YulFunctionCall",
                          "src": "4885:17:63"
                        },
                        "nativeSrc": "4885:17:63",
                        "nodeType": "YulExpressionStatement",
                        "src": "4885:17:63"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ret",
                                  "nativeSrc": "4927:3:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "4927:3:63"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "4932:4:63",
                                  "nodeType": "YulLiteral",
                                  "src": "4932:4:63",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "4923:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "4923:3:63"
                              },
                              "nativeSrc": "4923:14:63",
                              "nodeType": "YulFunctionCall",
                              "src": "4923:14:63"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "4939:3:63",
                              "nodeType": "YulIdentifier",
                              "src": "4939:3:63"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4916:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "4916:6:63"
                          },
                          "nativeSrc": "4916:27:63",
                          "nodeType": "YulFunctionCall",
                          "src": "4916:27:63"
                        },
                        "nativeSrc": "4916:27:63",
                        "nodeType": "YulExpressionStatement",
                        "src": "4916:27:63"
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14396,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4927:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14392,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4897:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14398,
                  "nodeType": "InlineAssembly",
                  "src": "4783:171:63"
                },
                {
                  "expression": {
                    "id": 14405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 14399,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14396,
                        "src": "4964:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14401,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "4968:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "4964:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14403,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14392,
                          "src": "4979:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 14402,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          14390,
                          14545
                        ],
                        "referencedDeclaration": 14390,
                        "src": "4975:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 14404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4975:9:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4964:20:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14406,
                  "nodeType": "ExpressionStatement",
                  "src": "4964:20:63"
                }
              ]
            },
            "id": 14408,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSliceB32",
            "nameLocation": "4622:10:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14392,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "4641:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14408,
                  "src": "4633:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14391,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4633:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4632:14:63"
            },
            "returnParameters": {
              "id": 14397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14396,
                  "mutability": "mutable",
                  "name": "ret",
                  "nameLocation": "4683:3:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14408,
                  "src": "4670:16:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14395,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14394,
                      "name": "Slice",
                      "nameLocations": [
                        "4670:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "4670:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "4670:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4669:18:63"
            },
            "scope": 15980,
            "src": "4613:379:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14424,
              "nodeType": "Block",
              "src": "5270:53:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 14418,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14411,
                          "src": "5294:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14419,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5299:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "5294:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 14420,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14411,
                          "src": "5305:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14421,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5310:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "5305:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14417,
                      "name": "Slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14156,
                      "src": "5288:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Slice_$14156_storage_ptr_$",
                        "typeString": "type(struct Slices.Slice storage pointer)"
                      }
                    },
                    "id": 14422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5288:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 14416,
                  "id": 14423,
                  "nodeType": "Return",
                  "src": "5281:34:63"
                }
              ]
            },
            "id": 14425,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "copy",
            "nameLocation": "5209:4:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14411,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "5227:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14425,
                  "src": "5214:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14410,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14409,
                      "name": "Slice",
                      "nameLocations": [
                        "5214:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "5214:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "5214:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5213:19:63"
            },
            "returnParameters": {
              "id": 14416,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14415,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14425,
                  "src": "5256:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14414,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14413,
                      "name": "Slice",
                      "nameLocations": [
                        "5256:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "5256:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "5256:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5255:14:63"
            },
            "scope": 15980,
            "src": "5200:123:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14455,
              "nodeType": "Block",
              "src": "5577:198:63",
              "statements": [
                {
                  "assignments": [
                    14434
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14434,
                      "mutability": "mutable",
                      "name": "ret",
                      "nameLocation": "5602:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14455,
                      "src": "5588:17:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 14433,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5588:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14440,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 14437,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14428,
                          "src": "5619:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14438,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5624:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "5619:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5608:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 14435,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5612:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 14439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5608:21:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5588:41:63"
                },
                {
                  "assignments": [
                    14442
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14442,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nameLocation": "5645:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14455,
                      "src": "5640:11:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14441,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5640:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14443,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5640:11:63"
                },
                {
                  "AST": {
                    "nativeSrc": "5671:26:63",
                    "nodeType": "YulBlock",
                    "src": "5671:26:63",
                    "statements": [
                      {
                        "nativeSrc": "5673:22:63",
                        "nodeType": "YulAssignment",
                        "src": "5673:22:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nativeSrc": "5687:3:63",
                              "nodeType": "YulIdentifier",
                              "src": "5687:3:63"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "5692:2:63",
                              "nodeType": "YulLiteral",
                              "src": "5692:2:63",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "5683:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "5683:3:63"
                          },
                          "nativeSrc": "5683:12:63",
                          "nodeType": "YulFunctionCall",
                          "src": "5683:12:63"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nativeSrc": "5673:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "5673:6:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14434,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5687:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14442,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5673:6:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14444,
                  "nodeType": "InlineAssembly",
                  "src": "5662:35:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14446,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14442,
                        "src": "5717:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 14447,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14428,
                          "src": "5725:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14448,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5730:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "5725:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 14449,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14428,
                          "src": "5736:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14450,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5741:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "5736:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14445,
                      "name": "_memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14209,
                      "src": "5709:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 14451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5709:37:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14452,
                  "nodeType": "ExpressionStatement",
                  "src": "5709:37:63"
                },
                {
                  "expression": {
                    "id": 14453,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14434,
                    "src": "5764:3:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 14432,
                  "id": 14454,
                  "nodeType": "Return",
                  "src": "5757:10:63"
                }
              ]
            },
            "id": 14456,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toString",
            "nameLocation": "5511:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14428,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "5533:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14456,
                  "src": "5520:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14427,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14426,
                      "name": "Slice",
                      "nameLocations": [
                        "5520:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "5520:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "5520:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5519:19:63"
            },
            "returnParameters": {
              "id": 14432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14431,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14456,
                  "src": "5562:13:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14430,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5562:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5561:15:63"
            },
            "scope": 15980,
            "src": "5502:273:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14544,
              "nodeType": "Block",
              "src": "6240:652:63",
              "statements": [
                {
                  "assignments": [
                    14465
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14465,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "6332:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14544,
                      "src": "6327:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14464,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6327:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14470,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14466,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14459,
                        "src": "6338:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14467,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6343:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "6338:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "3331",
                      "id": 14468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6350:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "6338:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6327:25:63"
                },
                {
                  "assignments": [
                    14472
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14472,
                      "mutability": "mutable",
                      "name": "end",
                      "nameLocation": "6368:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14544,
                      "src": "6363:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14471,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6363:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14477,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14473,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14465,
                      "src": "6374:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 14474,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14459,
                        "src": "6380:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14475,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "6385:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "6380:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6374:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6363:26:63"
                },
                {
                  "body": {
                    "id": 14542,
                    "nodeType": "Block",
                    "src": "6430:455:63",
                    "statements": [
                      {
                        "assignments": [
                          14489
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14489,
                            "mutability": "mutable",
                            "name": "b",
                            "nameLocation": "6451:1:63",
                            "nodeType": "VariableDeclaration",
                            "scope": 14542,
                            "src": "6445:7:63",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 14488,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "6445:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14490,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6445:7:63"
                      },
                      {
                        "AST": {
                          "nativeSrc": "6476:30:63",
                          "nodeType": "YulBlock",
                          "src": "6476:30:63",
                          "statements": [
                            {
                              "nativeSrc": "6478:26:63",
                              "nodeType": "YulAssignment",
                              "src": "6478:26:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "6493:3:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "6493:3:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "6487:5:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "6487:5:63"
                                    },
                                    "nativeSrc": "6487:10:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "6487:10:63"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "6499:4:63",
                                    "nodeType": "YulLiteral",
                                    "src": "6499:4:63",
                                    "type": "",
                                    "value": "0xFF"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nativeSrc": "6483:3:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "6483:3:63"
                                },
                                "nativeSrc": "6483:21:63",
                                "nodeType": "YulFunctionCall",
                                "src": "6483:21:63"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nativeSrc": "6478:1:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "6478:1:63"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 14489,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6478:1:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 14465,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6493:3:63",
                            "valueSize": 1
                          }
                        ],
                        "id": 14491,
                        "nodeType": "InlineAssembly",
                        "src": "6467:39:63"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 14494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14492,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14489,
                            "src": "6524:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 14493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6528:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "6524:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 14502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14500,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14489,
                              "src": "6586:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30784530",
                              "id": 14501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6590:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "6586:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 14510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 14508,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14489,
                                "src": "6648:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "hexValue": "30784630",
                                "id": 14509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6652:4:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6648:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 14518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 14516,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14489,
                                  "src": "6710:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30784638",
                                  "id": 14517,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6714:4:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6710:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 14526,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 14524,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14489,
                                    "src": "6772:1:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "30784643",
                                    "id": 14525,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6776:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6772:8:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 14536,
                                  "nodeType": "Block",
                                  "src": "6831:43:63",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 14534,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 14532,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 14465,
                                          "src": "6850:3:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "36",
                                          "id": 14533,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6857:1:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6850:8:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 14535,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6850:8:63"
                                    }
                                  ]
                                },
                                "id": 14537,
                                "nodeType": "IfStatement",
                                "src": "6769:105:63",
                                "trueBody": {
                                  "id": 14531,
                                  "nodeType": "Block",
                                  "src": "6782:43:63",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 14529,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 14527,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 14465,
                                          "src": "6801:3:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "35",
                                          "id": 14528,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6808:1:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6801:8:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 14530,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6801:8:63"
                                    }
                                  ]
                                }
                              },
                              "id": 14538,
                              "nodeType": "IfStatement",
                              "src": "6707:167:63",
                              "trueBody": {
                                "id": 14523,
                                "nodeType": "Block",
                                "src": "6720:43:63",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 14521,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 14519,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14465,
                                        "src": "6739:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "34",
                                        "id": 14520,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6746:1:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6739:8:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 14522,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6739:8:63"
                                  }
                                ]
                              }
                            },
                            "id": 14539,
                            "nodeType": "IfStatement",
                            "src": "6645:229:63",
                            "trueBody": {
                              "id": 14515,
                              "nodeType": "Block",
                              "src": "6658:43:63",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 14513,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 14511,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14465,
                                      "src": "6677:3:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "33",
                                      "id": 14512,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6684:1:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6677:8:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 14514,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6677:8:63"
                                }
                              ]
                            }
                          },
                          "id": 14540,
                          "nodeType": "IfStatement",
                          "src": "6583:291:63",
                          "trueBody": {
                            "id": 14507,
                            "nodeType": "Block",
                            "src": "6596:43:63",
                            "statements": [
                              {
                                "expression": {
                                  "id": 14505,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 14503,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14465,
                                    "src": "6615:3:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "hexValue": "32",
                                    "id": 14504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6622:1:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6615:8:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 14506,
                                "nodeType": "ExpressionStatement",
                                "src": "6615:8:63"
                              }
                            ]
                          }
                        },
                        "id": 14541,
                        "nodeType": "IfStatement",
                        "src": "6520:354:63",
                        "trueBody": {
                          "id": 14499,
                          "nodeType": "Block",
                          "src": "6534:43:63",
                          "statements": [
                            {
                              "expression": {
                                "id": 14497,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 14495,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14465,
                                  "src": "6553:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 14496,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6560:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6553:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 14498,
                              "nodeType": "ExpressionStatement",
                              "src": "6553:8:63"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14482,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14465,
                      "src": "6413:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 14483,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14472,
                      "src": "6419:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6413:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14543,
                  "initializationExpression": {
                    "expression": {
                      "id": 14480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 14478,
                        "name": "_l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14462,
                        "src": "6405:2:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "30",
                        "id": 14479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6410:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6405:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14481,
                    "nodeType": "ExpressionStatement",
                    "src": "6405:6:63"
                  },
                  "isSimpleCounterLoop": false,
                  "loopExpression": {
                    "expression": {
                      "id": 14486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6424:4:63",
                      "subExpression": {
                        "id": 14485,
                        "name": "_l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14462,
                        "src": "6424:2:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14487,
                    "nodeType": "ExpressionStatement",
                    "src": "6424:4:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "6400:485:63"
                }
              ]
            },
            "id": 14545,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nameLocation": "6185:3:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14459,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "6202:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14545,
                  "src": "6189:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14458,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14457,
                      "name": "Slice",
                      "nameLocations": [
                        "6189:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "6189:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "6189:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6188:19:63"
            },
            "returnParameters": {
              "id": 14463,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14462,
                  "mutability": "mutable",
                  "name": "_l",
                  "nameLocation": "6236:2:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14545,
                  "src": "6231:7:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14461,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "6231:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6230:9:63"
            },
            "scope": 15980,
            "src": "6176:716:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14558,
              "nodeType": "Block",
              "src": "7155:40:63",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14553,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14548,
                        "src": "7173:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14554,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7178:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "7173:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7186:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7173:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14552,
                  "id": 14557,
                  "nodeType": "Return",
                  "src": "7166:21:63"
                }
              ]
            },
            "id": 14559,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "empty",
            "nameLocation": "7101:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14548,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "7120:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14559,
                  "src": "7107:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14547,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14546,
                      "name": "Slice",
                      "nameLocations": [
                        "7107:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "7107:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "7107:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7106:19:63"
            },
            "returnParameters": {
              "id": 14552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14551,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14559,
                  "src": "7149:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14550,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7149:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7148:6:63"
            },
            "scope": 15980,
            "src": "7092:103:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14694,
              "nodeType": "Block",
              "src": "7718:992:63",
              "statements": [
                {
                  "assignments": [
                    14571
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14571,
                      "mutability": "mutable",
                      "name": "shortest",
                      "nameLocation": "7734:8:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14694,
                      "src": "7729:13:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14570,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7729:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14574,
                  "initialValue": {
                    "expression": {
                      "id": 14572,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14562,
                      "src": "7745:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                        "typeString": "struct Slices.Slice memory"
                      }
                    },
                    "id": 14573,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "7750:4:63",
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14153,
                    "src": "7745:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7729:25:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14575,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14565,
                        "src": "7769:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14576,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7775:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "7769:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 14577,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14562,
                        "src": "7782:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14578,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7787:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "7782:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7769:22:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14585,
                  "nodeType": "IfStatement",
                  "src": "7765:62:63",
                  "trueBody": {
                    "expression": {
                      "id": 14583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 14580,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14571,
                        "src": "7806:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "expression": {
                          "id": 14581,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14565,
                          "src": "7817:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 14582,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7823:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "7817:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7806:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14584,
                    "nodeType": "ExpressionStatement",
                    "src": "7806:21:63"
                  }
                },
                {
                  "assignments": [
                    14587
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14587,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nameLocation": "7845:7:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14694,
                      "src": "7840:12:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14586,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7840:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14590,
                  "initialValue": {
                    "expression": {
                      "id": 14588,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14562,
                      "src": "7855:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                        "typeString": "struct Slices.Slice memory"
                      }
                    },
                    "id": 14589,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "7860:4:63",
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14155,
                    "src": "7855:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7840:24:63"
                },
                {
                  "assignments": [
                    14592
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14592,
                      "mutability": "mutable",
                      "name": "otherptr",
                      "nameLocation": "7880:8:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14694,
                      "src": "7875:13:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14591,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7875:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14595,
                  "initialValue": {
                    "expression": {
                      "id": 14593,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14565,
                      "src": "7891:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                        "typeString": "struct Slices.Slice memory"
                      }
                    },
                    "id": 14594,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "7897:4:63",
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14155,
                    "src": "7891:10:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7875:26:63"
                },
                {
                  "body": {
                    "id": 14680,
                    "nodeType": "Block",
                    "src": "7958:695:63",
                    "statements": [
                      {
                        "assignments": [
                          14608
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14608,
                            "mutability": "mutable",
                            "name": "a",
                            "nameLocation": "7978:1:63",
                            "nodeType": "VariableDeclaration",
                            "scope": 14680,
                            "src": "7973:6:63",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 14607,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7973:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14609,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7973:6:63"
                      },
                      {
                        "assignments": [
                          14611
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14611,
                            "mutability": "mutable",
                            "name": "b",
                            "nameLocation": "7999:1:63",
                            "nodeType": "VariableDeclaration",
                            "scope": 14680,
                            "src": "7994:6:63",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 14610,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7994:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14612,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7994:6:63"
                      },
                      {
                        "AST": {
                          "nativeSrc": "8024:91:63",
                          "nodeType": "YulBlock",
                          "src": "8024:91:63",
                          "statements": [
                            {
                              "nativeSrc": "8043:19:63",
                              "nodeType": "YulAssignment",
                              "src": "8043:19:63",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "selfptr",
                                    "nativeSrc": "8054:7:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "8054:7:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "8048:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "8048:5:63"
                                },
                                "nativeSrc": "8048:14:63",
                                "nodeType": "YulFunctionCall",
                                "src": "8048:14:63"
                              },
                              "variableNames": [
                                {
                                  "name": "a",
                                  "nativeSrc": "8043:1:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "8043:1:63"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "8080:20:63",
                              "nodeType": "YulAssignment",
                              "src": "8080:20:63",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "otherptr",
                                    "nativeSrc": "8091:8:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "8091:8:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "8085:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "8085:5:63"
                                },
                                "nativeSrc": "8085:15:63",
                                "nodeType": "YulFunctionCall",
                                "src": "8085:15:63"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nativeSrc": "8080:1:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "8080:1:63"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 14608,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8043:1:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 14611,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8080:1:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 14592,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8091:8:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 14587,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8054:7:63",
                            "valueSize": 1
                          }
                        ],
                        "id": 14613,
                        "nodeType": "InlineAssembly",
                        "src": "8015:100:63"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14614,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14608,
                            "src": "8133:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 14615,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14611,
                            "src": "8138:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8133:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14671,
                        "nodeType": "IfStatement",
                        "src": "8129:456:63",
                        "trueBody": {
                          "id": 14670,
                          "nodeType": "Block",
                          "src": "8141:444:63",
                          "statements": [
                            {
                              "assignments": [
                                14618
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 14618,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nameLocation": "8227:4:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 14670,
                                  "src": "8222:9:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 14617,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8222:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 14624,
                              "initialValue": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 14621,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "8239:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 14620,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8239:4:63",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      }
                                    ],
                                    "id": 14619,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967269,
                                    "src": "8234:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 14622,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8234:10:63",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_uint256",
                                    "typeString": "type(uint256)"
                                  }
                                },
                                "id": 14623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "8245:3:63",
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "8234:14:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8222:26:63"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 14625,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14571,
                                  "src": "8283:8:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 14626,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8294:2:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "8283:13:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 14647,
                              "nodeType": "IfStatement",
                              "src": "8280:105:63",
                              "trueBody": {
                                "id": 14646,
                                "nodeType": "Block",
                                "src": "8298:87:63",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 14644,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 14628,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 14618,
                                        "src": "8319:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 14643,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "8326:39:63",
                                        "subExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 14641,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 14639,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "32",
                                                  "id": 14629,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "8328:1:63",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "components": [
                                                    {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 14637,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "hexValue": "38",
                                                        "id": 14630,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8334:1:63",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "components": [
                                                          {
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 14635,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 14633,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "hexValue": "3332",
                                                                "id": 14631,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "8339:2:63",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "id": 14632,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 14571,
                                                                "src": "8344:8:63",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "8339:13:63",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "id": 14634,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 14597,
                                                              "src": "8355:3:63",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "8339:19:63",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 14636,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "8338:21:63",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "8334:25:63",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 14638,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "8333:27:63",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "8328:32:63",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "hexValue": "31",
                                                "id": 14640,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8363:1:63",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "8328:36:63",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 14642,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "8327:38:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8319:46:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 14645,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8319:46:63"
                                  }
                                ]
                              }
                            },
                            {
                              "id": 14669,
                              "nodeType": "UncheckedBlock",
                              "src": "8403:167:63",
                              "statements": [
                                {
                                  "assignments": [
                                    14649
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 14649,
                                      "mutability": "mutable",
                                      "name": "diff",
                                      "nameLocation": "8441:4:63",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 14669,
                                      "src": "8436:9:63",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 14648,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8436:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 14659,
                                  "initialValue": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 14658,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 14652,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 14650,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 14608,
                                            "src": "8449:1:63",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "&",
                                          "rightExpression": {
                                            "id": 14651,
                                            "name": "mask",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 14618,
                                            "src": "8453:4:63",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "8449:8:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 14653,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "8448:10:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 14656,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 14654,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 14611,
                                            "src": "8462:1:63",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "&",
                                          "rightExpression": {
                                            "id": 14655,
                                            "name": "mask",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 14618,
                                            "src": "8466:4:63",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "8462:8:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 14657,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "8461:10:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8448:23:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "8436:35:63"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 14662,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 14660,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 14649,
                                      "src": "8498:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 14661,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8506:1:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "8498:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 14668,
                                  "nodeType": "IfStatement",
                                  "src": "8494:56:63",
                                  "trueBody": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 14665,
                                          "name": "diff",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 14649,
                                          "src": "8545:4:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 14664,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "8541:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int256_$",
                                          "typeString": "type(int256)"
                                        },
                                        "typeName": {
                                          "id": 14663,
                                          "name": "int",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8541:3:63",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 14666,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8541:9:63",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "functionReturnParameters": 14569,
                                    "id": 14667,
                                    "nodeType": "Return",
                                    "src": "8534:16:63"
                                  }
                                }
                              ]
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 14674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14672,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14587,
                            "src": "8599:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 14673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8610:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8599:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14675,
                        "nodeType": "ExpressionStatement",
                        "src": "8599:13:63"
                      },
                      {
                        "expression": {
                          "id": 14678,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14676,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14592,
                            "src": "8627:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 14677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8639:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8627:14:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14679,
                        "nodeType": "ExpressionStatement",
                        "src": "8627:14:63"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14600,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14597,
                      "src": "7931:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 14601,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14571,
                      "src": "7937:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7931:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14681,
                  "initializationExpression": {
                    "assignments": [
                      14597
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 14597,
                        "mutability": "mutable",
                        "name": "idx",
                        "nameLocation": "7922:3:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 14681,
                        "src": "7917:8:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 14596,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7917:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 14599,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 14598,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7928:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7917:12:63"
                  },
                  "isSimpleCounterLoop": false,
                  "loopExpression": {
                    "expression": {
                      "id": 14605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 14603,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14597,
                        "src": "7947:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 14604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7954:2:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7947:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14606,
                    "nodeType": "ExpressionStatement",
                    "src": "7947:9:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "7912:741:63"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 14692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 14684,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14562,
                            "src": "8674:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 14685,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8679:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "8674:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 14683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8670:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 14682,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8670:3:63",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14686,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8670:14:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 14689,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14565,
                            "src": "8691:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 14690,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8697:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "8691:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 14688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8687:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 14687,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8687:3:63",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14691,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8687:15:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "8670:32:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 14569,
                  "id": 14693,
                  "nodeType": "Return",
                  "src": "8663:39:63"
                }
              ]
            },
            "id": 14695,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compare",
            "nameLocation": "7643:7:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14566,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14562,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "7664:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14695,
                  "src": "7651:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14561,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14560,
                      "name": "Slice",
                      "nameLocations": [
                        "7651:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "7651:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "7651:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14565,
                  "mutability": "mutable",
                  "name": "other",
                  "nameLocation": "7683:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14695,
                  "src": "7670:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14564,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14563,
                      "name": "Slice",
                      "nameLocations": [
                        "7670:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "7670:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "7670:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7650:39:63"
            },
            "returnParameters": {
              "id": 14569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14568,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14695,
                  "src": "7713:3:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 14567,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "7713:3:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7712:5:63"
            },
            "scope": 15980,
            "src": "7634:1076:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14713,
              "nodeType": "Block",
              "src": "9046:51:63",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 14711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 14707,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14698,
                          "src": "9072:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        {
                          "id": 14708,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14701,
                          "src": "9078:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        ],
                        "id": 14706,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14695,
                        "src": "9064:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct Slices.Slice memory,struct Slices.Slice memory) pure returns (int256)"
                        }
                      },
                      "id": 14709,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9064:20:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14710,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9088:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9064:25:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 14705,
                  "id": 14712,
                  "nodeType": "Return",
                  "src": "9057:32:63"
                }
              ]
            },
            "id": 14714,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nameLocation": "8971:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14698,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "8991:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14714,
                  "src": "8978:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14697,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14696,
                      "name": "Slice",
                      "nameLocations": [
                        "8978:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "8978:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "8978:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14701,
                  "mutability": "mutable",
                  "name": "other",
                  "nameLocation": "9010:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14714,
                  "src": "8997:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14700,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14699,
                      "name": "Slice",
                      "nameLocations": [
                        "8997:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "8997:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "8997:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8977:39:63"
            },
            "returnParameters": {
              "id": 14705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14704,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14714,
                  "src": "9040:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14703,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9040:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9039:6:63"
            },
            "scope": 15980,
            "src": "8962:135:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14834,
              "nodeType": "Block",
              "src": "9492:834:63",
              "statements": [
                {
                  "expression": {
                    "id": 14731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 14726,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14720,
                        "src": "9503:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14728,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "9508:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "9503:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 14729,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14717,
                        "src": "9515:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14730,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9520:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "9515:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9503:21:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14732,
                  "nodeType": "ExpressionStatement",
                  "src": "9503:21:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14733,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14717,
                        "src": "9541:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14734,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9546:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "9541:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14735,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9554:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9541:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14746,
                  "nodeType": "IfStatement",
                  "src": "9537:86:63",
                  "trueBody": {
                    "id": 14745,
                    "nodeType": "Block",
                    "src": "9557:66:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 14737,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14720,
                              "src": "9572:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14739,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "9577:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "9572:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 14740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9584:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9572:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14742,
                        "nodeType": "ExpressionStatement",
                        "src": "9572:13:63"
                      },
                      {
                        "expression": {
                          "id": 14743,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14720,
                          "src": "9607:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "functionReturnParameters": 14725,
                        "id": 14744,
                        "nodeType": "Return",
                        "src": "9600:11:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14748
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14748,
                      "mutability": "mutable",
                      "name": "_l",
                      "nameLocation": "9640:2:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14834,
                      "src": "9635:7:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14747,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9635:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14749,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9635:7:63"
                },
                {
                  "assignments": [
                    14751
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14751,
                      "mutability": "mutable",
                      "name": "_b",
                      "nameLocation": "9658:2:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14834,
                      "src": "9653:7:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14750,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9653:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14752,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9653:7:63"
                },
                {
                  "AST": {
                    "nativeSrc": "9744:57:63",
                    "nodeType": "YulBlock",
                    "src": "9744:57:63",
                    "statements": [
                      {
                        "nativeSrc": "9746:53:63",
                        "nodeType": "YulAssignment",
                        "src": "9746:53:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "self",
                                              "nativeSrc": "9776:4:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "9776:4:63"
                                            },
                                            {
                                              "kind": "number",
                                              "nativeSrc": "9782:2:63",
                                              "nodeType": "YulLiteral",
                                              "src": "9782:2:63",
                                              "type": "",
                                              "value": "32"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nativeSrc": "9772:3:63",
                                            "nodeType": "YulIdentifier",
                                            "src": "9772:3:63"
                                          },
                                          "nativeSrc": "9772:13:63",
                                          "nodeType": "YulFunctionCall",
                                          "src": "9772:13:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nativeSrc": "9766:5:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "9766:5:63"
                                      },
                                      "nativeSrc": "9766:20:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "9766:20:63"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "9788:2:63",
                                      "nodeType": "YulLiteral",
                                      "src": "9788:2:63",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nativeSrc": "9762:3:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "9762:3:63"
                                  },
                                  "nativeSrc": "9762:29:63",
                                  "nodeType": "YulFunctionCall",
                                  "src": "9762:29:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "9756:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "9756:5:63"
                              },
                              "nativeSrc": "9756:36:63",
                              "nodeType": "YulFunctionCall",
                              "src": "9756:36:63"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "9794:4:63",
                              "nodeType": "YulLiteral",
                              "src": "9794:4:63",
                              "type": "",
                              "value": "0xFF"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nativeSrc": "9752:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "9752:3:63"
                          },
                          "nativeSrc": "9752:47:63",
                          "nodeType": "YulFunctionCall",
                          "src": "9752:47:63"
                        },
                        "variableNames": [
                          {
                            "name": "_b",
                            "nativeSrc": "9746:2:63",
                            "nodeType": "YulIdentifier",
                            "src": "9746:2:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14751,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9746:2:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14717,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9776:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14753,
                  "nodeType": "InlineAssembly",
                  "src": "9735:66:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14754,
                      "name": "_b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14751,
                      "src": "9815:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 14755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9820:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "9815:9:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 14762,
                        "name": "_b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14751,
                        "src": "9868:2:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 14763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9873:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "9868:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14770,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14751,
                          "src": "9921:2:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 14771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9926:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "9921:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 14782,
                        "nodeType": "Block",
                        "src": "9971:33:63",
                        "statements": [
                          {
                            "expression": {
                              "id": 14780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14778,
                                "name": "_l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14748,
                                "src": "9986:2:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 14779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9991:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "9986:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14781,
                            "nodeType": "ExpressionStatement",
                            "src": "9986:6:63"
                          }
                        ]
                      },
                      "id": 14783,
                      "nodeType": "IfStatement",
                      "src": "9918:86:63",
                      "trueBody": {
                        "id": 14777,
                        "nodeType": "Block",
                        "src": "9932:33:63",
                        "statements": [
                          {
                            "expression": {
                              "id": 14775,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14773,
                                "name": "_l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14748,
                                "src": "9947:2:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 14774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9952:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "9947:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14776,
                            "nodeType": "ExpressionStatement",
                            "src": "9947:6:63"
                          }
                        ]
                      }
                    },
                    "id": 14784,
                    "nodeType": "IfStatement",
                    "src": "9865:139:63",
                    "trueBody": {
                      "id": 14769,
                      "nodeType": "Block",
                      "src": "9879:33:63",
                      "statements": [
                        {
                          "expression": {
                            "id": 14767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 14765,
                              "name": "_l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14748,
                              "src": "9894:2:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 14766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9899:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "9894:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14768,
                          "nodeType": "ExpressionStatement",
                          "src": "9894:6:63"
                        }
                      ]
                    }
                  },
                  "id": 14785,
                  "nodeType": "IfStatement",
                  "src": "9811:193:63",
                  "trueBody": {
                    "id": 14761,
                    "nodeType": "Block",
                    "src": "9826:33:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14757,
                            "name": "_l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14748,
                            "src": "9841:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 14758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9846:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9841:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14760,
                        "nodeType": "ExpressionStatement",
                        "src": "9841:6:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14786,
                      "name": "_l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14748,
                      "src": "10063:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 14787,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14717,
                        "src": "10068:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14788,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10073:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "10068:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10063:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14813,
                  "nodeType": "IfStatement",
                  "src": "10059:159:63",
                  "trueBody": {
                    "id": 14812,
                    "nodeType": "Block",
                    "src": "10079:139:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 14790,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14720,
                              "src": "10094:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14792,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "10099:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "10094:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 14793,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14717,
                              "src": "10106:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14794,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10111:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "10106:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10094:21:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14796,
                        "nodeType": "ExpressionStatement",
                        "src": "10094:21:63"
                      },
                      {
                        "expression": {
                          "id": 14802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 14797,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14717,
                              "src": "10130:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14799,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "10135:4:63",
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14155,
                            "src": "10130:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 14800,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14717,
                              "src": "10143:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14801,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10148:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "10143:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10130:22:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14803,
                        "nodeType": "ExpressionStatement",
                        "src": "10130:22:63"
                      },
                      {
                        "expression": {
                          "id": 14808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 14804,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14717,
                              "src": "10167:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 14806,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "10172:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "10167:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 14807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10179:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10167:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14809,
                        "nodeType": "ExpressionStatement",
                        "src": "10167:13:63"
                      },
                      {
                        "expression": {
                          "id": 14810,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14720,
                          "src": "10202:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "functionReturnParameters": 14725,
                        "id": 14811,
                        "nodeType": "Return",
                        "src": "10195:11:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 14818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 14814,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14717,
                        "src": "10230:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14816,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "10235:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "10230:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 14817,
                      "name": "_l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14748,
                      "src": "10243:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10230:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14819,
                  "nodeType": "ExpressionStatement",
                  "src": "10230:15:63"
                },
                {
                  "expression": {
                    "id": 14824,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 14820,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14717,
                        "src": "10256:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14822,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "10261:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "10256:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 14823,
                      "name": "_l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14748,
                      "src": "10269:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10256:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14825,
                  "nodeType": "ExpressionStatement",
                  "src": "10256:15:63"
                },
                {
                  "expression": {
                    "id": 14830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 14826,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14720,
                        "src": "10282:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14828,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "10287:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "10282:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14829,
                      "name": "_l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14748,
                      "src": "10294:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10282:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14831,
                  "nodeType": "ExpressionStatement",
                  "src": "10282:14:63"
                },
                {
                  "expression": {
                    "id": 14832,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14720,
                    "src": "10314:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 14725,
                  "id": 14833,
                  "nodeType": "Return",
                  "src": "10307:11:63"
                }
              ]
            },
            "id": 14835,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nameLocation": "9408:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14721,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14717,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "9430:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14835,
                  "src": "9417:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14716,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14715,
                      "name": "Slice",
                      "nameLocations": [
                        "9417:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "9417:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "9417:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14720,
                  "mutability": "mutable",
                  "name": "rune",
                  "nameLocation": "9449:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14835,
                  "src": "9436:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14719,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14718,
                      "name": "Slice",
                      "nameLocations": [
                        "9436:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "9436:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "9436:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9416:38:63"
            },
            "returnParameters": {
              "id": 14725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14724,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14835,
                  "src": "9478:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14723,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14722,
                      "name": "Slice",
                      "nameLocations": [
                        "9478:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "9478:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "9478:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9477:14:63"
            },
            "scope": 15980,
            "src": "9399:927:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14849,
              "nodeType": "Block",
              "src": "10652:38:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14845,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14838,
                        "src": "10672:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      {
                        "id": 14846,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14842,
                        "src": "10678:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      ],
                      "id": 14844,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        14835,
                        14850
                      ],
                      "referencedDeclaration": 14835,
                      "src": "10663:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$returns$_t_struct$_Slice_$14156_memory_ptr_$",
                        "typeString": "function (struct Slices.Slice memory,struct Slices.Slice memory) pure returns (struct Slices.Slice memory)"
                      }
                    },
                    "id": 14847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10663:19:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "id": 14848,
                  "nodeType": "ExpressionStatement",
                  "src": "10663:19:63"
                }
              ]
            },
            "id": 14850,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nameLocation": "10583:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14838,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "10605:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14850,
                  "src": "10592:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14837,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14836,
                      "name": "Slice",
                      "nameLocations": [
                        "10592:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "10592:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "10592:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10591:19:63"
            },
            "returnParameters": {
              "id": 14843,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14842,
                  "mutability": "mutable",
                  "name": "ret",
                  "nameLocation": "10647:3:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14850,
                  "src": "10634:16:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14841,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14840,
                      "name": "Slice",
                      "nameLocations": [
                        "10634:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "10634:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "10634:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10633:18:63"
            },
            "scope": 15980,
            "src": "10574:116:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14997,
              "nodeType": "Block",
              "src": "10958:1055:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 14858,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14853,
                        "src": "10973:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14859,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10978:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "10973:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 14860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10986:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10973:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14865,
                  "nodeType": "IfStatement",
                  "src": "10969:55:63",
                  "trueBody": {
                    "id": 14864,
                    "nodeType": "Block",
                    "src": "10989:35:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 14862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11011:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 14857,
                        "id": 14863,
                        "nodeType": "Return",
                        "src": "11004:8:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    14867
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14867,
                      "mutability": "mutable",
                      "name": "word",
                      "nameLocation": "11041:4:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14997,
                      "src": "11036:9:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14866,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11036:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14868,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11036:9:63"
                },
                {
                  "assignments": [
                    14870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14870,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "11061:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14997,
                      "src": "11056:11:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14869,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11056:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14871,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11056:11:63"
                },
                {
                  "assignments": [
                    14873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14873,
                      "mutability": "mutable",
                      "name": "divisor",
                      "nameLocation": "11083:7:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14997,
                      "src": "11078:12:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14872,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11078:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14877,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 14876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 14874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11093:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "323438",
                      "id": 14875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11098:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "11093:8:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11078:23:63"
                },
                {
                  "AST": {
                    "nativeSrc": "11168:38:63",
                    "nodeType": "YulBlock",
                    "src": "11168:38:63",
                    "statements": [
                      {
                        "nativeSrc": "11170:34:63",
                        "nodeType": "YulAssignment",
                        "src": "11170:34:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nativeSrc": "11193:4:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "11193:4:63"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "11199:2:63",
                                      "nodeType": "YulLiteral",
                                      "src": "11199:2:63",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "11189:3:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "11189:3:63"
                                  },
                                  "nativeSrc": "11189:13:63",
                                  "nodeType": "YulFunctionCall",
                                  "src": "11189:13:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "11183:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "11183:5:63"
                              },
                              "nativeSrc": "11183:20:63",
                              "nodeType": "YulFunctionCall",
                              "src": "11183:20:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "11177:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "11177:5:63"
                          },
                          "nativeSrc": "11177:27:63",
                          "nodeType": "YulFunctionCall",
                          "src": "11177:27:63"
                        },
                        "variableNames": [
                          {
                            "name": "word",
                            "nativeSrc": "11170:4:63",
                            "nodeType": "YulIdentifier",
                            "src": "11170:4:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 14853,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11193:4:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14867,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11170:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 14878,
                  "nodeType": "InlineAssembly",
                  "src": "11159:47:63"
                },
                {
                  "assignments": [
                    14880
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14880,
                      "mutability": "mutable",
                      "name": "b",
                      "nameLocation": "11221:1:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 14997,
                      "src": "11216:6:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14879,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "11216:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14884,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14881,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14867,
                      "src": "11225:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 14882,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14873,
                      "src": "11232:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11225:14:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11216:23:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14885,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14880,
                      "src": "11254:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 14886,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11258:4:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "11254:8:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 14899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 14897,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14880,
                        "src": "11332:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 14898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11336:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "11332:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14911,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14880,
                          "src": "11417:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 14912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11421:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "11417:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 14935,
                        "nodeType": "Block",
                        "src": "11499:66:63",
                        "statements": [
                          {
                            "expression": {
                              "id": 14929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14925,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14856,
                                "src": "11514:3:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14928,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 14926,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14880,
                                  "src": "11520:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783037",
                                  "id": 14927,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11524:4:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "11520:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11514:14:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14930,
                            "nodeType": "ExpressionStatement",
                            "src": "11514:14:63"
                          },
                          {
                            "expression": {
                              "id": 14933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14931,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14870,
                                "src": "11543:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 14932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11552:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "11543:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14934,
                            "nodeType": "ExpressionStatement",
                            "src": "11543:10:63"
                          }
                        ]
                      },
                      "id": 14936,
                      "nodeType": "IfStatement",
                      "src": "11414:151:63",
                      "trueBody": {
                        "id": 14924,
                        "nodeType": "Block",
                        "src": "11427:66:63",
                        "statements": [
                          {
                            "expression": {
                              "id": 14918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14914,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14856,
                                "src": "11442:3:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 14917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 14915,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14880,
                                  "src": "11448:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783046",
                                  "id": 14916,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11452:4:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "11448:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11442:14:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14919,
                            "nodeType": "ExpressionStatement",
                            "src": "11442:14:63"
                          },
                          {
                            "expression": {
                              "id": 14922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 14920,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14870,
                                "src": "11471:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 14921,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11480:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "11471:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 14923,
                            "nodeType": "ExpressionStatement",
                            "src": "11471:10:63"
                          }
                        ]
                      }
                    },
                    "id": 14937,
                    "nodeType": "IfStatement",
                    "src": "11329:236:63",
                    "trueBody": {
                      "id": 14910,
                      "nodeType": "Block",
                      "src": "11342:66:63",
                      "statements": [
                        {
                          "expression": {
                            "id": 14904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 14900,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14856,
                              "src": "11357:3:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14903,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 14901,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14880,
                                "src": "11363:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "hexValue": "30783146",
                                "id": 14902,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11367:4:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "11363:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11357:14:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14905,
                          "nodeType": "ExpressionStatement",
                          "src": "11357:14:63"
                        },
                        {
                          "expression": {
                            "id": 14908,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 14906,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14870,
                              "src": "11386:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 14907,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11395:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "11386:10:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14909,
                          "nodeType": "ExpressionStatement",
                          "src": "11386:10:63"
                        }
                      ]
                    }
                  },
                  "id": 14938,
                  "nodeType": "IfStatement",
                  "src": "11250:315:63",
                  "trueBody": {
                    "id": 14896,
                    "nodeType": "Block",
                    "src": "11264:59:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14888,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14856,
                            "src": "11279:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 14889,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14880,
                            "src": "11285:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11279:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14891,
                        "nodeType": "ExpressionStatement",
                        "src": "11279:7:63"
                      },
                      {
                        "expression": {
                          "id": 14894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14892,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14870,
                            "src": "11301:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 14893,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11310:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "11301:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14895,
                        "nodeType": "ExpressionStatement",
                        "src": "11301:10:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14939,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14870,
                      "src": "11624:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 14940,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14853,
                        "src": "11633:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 14941,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11638:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "11633:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11624:18:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14946,
                  "nodeType": "IfStatement",
                  "src": "11620:59:63",
                  "trueBody": {
                    "id": 14945,
                    "nodeType": "Block",
                    "src": "11644:35:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 14943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11666:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 14857,
                        "id": 14944,
                        "nodeType": "Return",
                        "src": "11659:8:63"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 14993,
                    "nodeType": "Block",
                    "src": "11725:258:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 14961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14957,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14873,
                            "src": "11740:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14958,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14873,
                              "src": "11750:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "323536",
                              "id": 14959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11760:3:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "11750:13:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11740:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14962,
                        "nodeType": "ExpressionStatement",
                        "src": "11740:23:63"
                      },
                      {
                        "expression": {
                          "id": 14970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14963,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14880,
                            "src": "11778:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 14966,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 14964,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14867,
                                    "src": "11783:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 14965,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14873,
                                    "src": "11790:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11783:14:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 14967,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11782:16:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784646",
                              "id": 14968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11801:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "11782:23:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11778:27:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14971,
                        "nodeType": "ExpressionStatement",
                        "src": "11778:27:63"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14972,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14880,
                              "src": "11824:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784330",
                              "id": 14973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11828:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "11824:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 14975,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11836:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "11824:16:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 14980,
                        "nodeType": "IfStatement",
                        "src": "11820:108:63",
                        "trueBody": {
                          "id": 14979,
                          "nodeType": "Block",
                          "src": "11842:86:63",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 14977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11911:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 14857,
                              "id": 14978,
                              "nodeType": "Return",
                              "src": "11904:8:63"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 14991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14981,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14856,
                            "src": "11942:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 14984,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 14982,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14856,
                                    "src": "11949:3:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 14983,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11955:2:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "11949:8:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 14985,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11948:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 14988,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 14986,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14880,
                                    "src": "11962:1:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "30783346",
                                    "id": 14987,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11966:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "11962:8:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 14989,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11961:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11948:23:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11942:29:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 14992,
                        "nodeType": "ExpressionStatement",
                        "src": "11942:29:63"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14951,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14948,
                      "src": "11708:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 14952,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14870,
                      "src": "11712:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11708:10:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14994,
                  "initializationExpression": {
                    "assignments": [
                      14948
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 14948,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "11701:1:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 14994,
                        "src": "11696:6:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 14947,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11696:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 14950,
                    "initialValue": {
                      "hexValue": "31",
                      "id": 14949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11705:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11696:10:63"
                  },
                  "isSimpleCounterLoop": true,
                  "loopExpression": {
                    "expression": {
                      "id": 14955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11720:3:63",
                      "subExpression": {
                        "id": 14954,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14948,
                        "src": "11720:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 14956,
                    "nodeType": "ExpressionStatement",
                    "src": "11720:3:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "11691:292:63"
                },
                {
                  "expression": {
                    "id": 14995,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14856,
                    "src": "12002:3:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14857,
                  "id": 14996,
                  "nodeType": "Return",
                  "src": "11995:10:63"
                }
              ]
            },
            "id": 14998,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ord",
            "nameLocation": "10902:3:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14853,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "10919:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14998,
                  "src": "10906:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 14852,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14851,
                      "name": "Slice",
                      "nameLocations": [
                        "10906:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "10906:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "10906:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10905:19:63"
            },
            "returnParameters": {
              "id": 14857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14856,
                  "mutability": "mutable",
                  "name": "ret",
                  "nameLocation": "10953:3:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 14998,
                  "src": "10948:8:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14855,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10948:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10947:10:63"
            },
            "scope": 15980,
            "src": "10893:1120:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15007,
              "nodeType": "Block",
              "src": "12242:104:63",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "12262:77:63",
                    "nodeType": "YulBlock",
                    "src": "12262:77:63",
                    "statements": [
                      {
                        "nativeSrc": "12277:51:63",
                        "nodeType": "YulAssignment",
                        "src": "12277:51:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nativeSrc": "12304:4:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "12304:4:63"
                                    },
                                    {
                                      "kind": "number",
                                      "nativeSrc": "12310:2:63",
                                      "nodeType": "YulLiteral",
                                      "src": "12310:2:63",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "12300:3:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "12300:3:63"
                                  },
                                  "nativeSrc": "12300:13:63",
                                  "nodeType": "YulFunctionCall",
                                  "src": "12300:13:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "12294:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "12294:5:63"
                              },
                              "nativeSrc": "12294:20:63",
                              "nodeType": "YulFunctionCall",
                              "src": "12294:20:63"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nativeSrc": "12322:4:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "12322:4:63"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "12316:5:63",
                                "nodeType": "YulIdentifier",
                                "src": "12316:5:63"
                              },
                              "nativeSrc": "12316:11:63",
                              "nodeType": "YulFunctionCall",
                              "src": "12316:11:63"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nativeSrc": "12284:9:63",
                            "nodeType": "YulIdentifier",
                            "src": "12284:9:63"
                          },
                          "nativeSrc": "12284:44:63",
                          "nodeType": "YulFunctionCall",
                          "src": "12284:44:63"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nativeSrc": "12277:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "12277:3:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 15004,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12277:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15001,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12304:4:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15001,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12322:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 15006,
                  "nodeType": "InlineAssembly",
                  "src": "12253:86:63"
                }
              ]
            },
            "id": 15008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "nameLocation": "12180:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15001,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "12200:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15008,
                  "src": "12187:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15000,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 14999,
                      "name": "Slice",
                      "nameLocations": [
                        "12187:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "12187:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "12187:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12186:19:63"
            },
            "returnParameters": {
              "id": 15005,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15004,
                  "mutability": "mutable",
                  "name": "ret",
                  "nameLocation": "12237:3:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15008,
                  "src": "12229:11:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 15003,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12229:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12228:13:63"
            },
            "scope": 15980,
            "src": "12171:175:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15043,
              "nodeType": "Block",
              "src": "12692:473:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15019,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15011,
                        "src": "12707:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15020,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12712:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "12707:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15021,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15014,
                        "src": "12719:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15022,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12726:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "12719:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12707:23:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15027,
                  "nodeType": "IfStatement",
                  "src": "12703:68:63",
                  "trueBody": {
                    "id": 15026,
                    "nodeType": "Block",
                    "src": "12732:39:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 15024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12754:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 15018,
                        "id": 15025,
                        "nodeType": "Return",
                        "src": "12747:12:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15028,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15011,
                        "src": "12787:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15029,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12792:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "12787:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 15030,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15014,
                        "src": "12800:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12807:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "12800:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12787:24:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15036,
                  "nodeType": "IfStatement",
                  "src": "12783:68:63",
                  "trueBody": {
                    "id": 15035,
                    "nodeType": "Block",
                    "src": "12813:38:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 15033,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12835:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 15018,
                        "id": 15034,
                        "nodeType": "Return",
                        "src": "12828:11:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15038
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15038,
                      "mutability": "mutable",
                      "name": "equal",
                      "nameLocation": "12868:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15043,
                      "src": "12863:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15037,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12863:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15039,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12863:10:63"
                },
                {
                  "AST": {
                    "nativeSrc": "12893:242:63",
                    "nodeType": "YulBlock",
                    "src": "12893:242:63",
                    "statements": [
                      {
                        "nativeSrc": "12908:27:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "12908:27:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nativeSrc": "12928:6:63",
                              "nodeType": "YulIdentifier",
                              "src": "12928:6:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "12922:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "12922:5:63"
                          },
                          "nativeSrc": "12922:13:63",
                          "nodeType": "YulFunctionCall",
                          "src": "12922:13:63"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nativeSrc": "12912:6:63",
                            "nodeType": "YulTypedName",
                            "src": "12912:6:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "12949:37:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "12949:37:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nativeSrc": "12974:4:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "12974:4:63"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "12980:4:63",
                                  "nodeType": "YulLiteral",
                                  "src": "12980:4:63",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "12970:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "12970:3:63"
                              },
                              "nativeSrc": "12970:15:63",
                              "nodeType": "YulFunctionCall",
                              "src": "12970:15:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "12964:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "12964:5:63"
                          },
                          "nativeSrc": "12964:22:63",
                          "nodeType": "YulFunctionCall",
                          "src": "12964:22:63"
                        },
                        "variables": [
                          {
                            "name": "selfptr",
                            "nativeSrc": "12953:7:63",
                            "nodeType": "YulTypedName",
                            "src": "12953:7:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "13000:41:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "13000:41:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nativeSrc": "13027:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13027:6:63"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "13035:4:63",
                                  "nodeType": "YulLiteral",
                                  "src": "13035:4:63",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "13023:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "13023:3:63"
                              },
                              "nativeSrc": "13023:17:63",
                              "nodeType": "YulFunctionCall",
                              "src": "13023:17:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "13017:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "13017:5:63"
                          },
                          "nativeSrc": "13017:24:63",
                          "nodeType": "YulFunctionCall",
                          "src": "13017:24:63"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nativeSrc": "13004:9:63",
                            "nodeType": "YulTypedName",
                            "src": "13004:9:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "13055:69:63",
                        "nodeType": "YulAssignment",
                        "src": "13055:69:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nativeSrc": "13077:7:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13077:7:63"
                                },
                                {
                                  "name": "length",
                                  "nativeSrc": "13086:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13086:6:63"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nativeSrc": "13067:9:63",
                                "nodeType": "YulIdentifier",
                                "src": "13067:9:63"
                              },
                              "nativeSrc": "13067:26:63",
                              "nodeType": "YulFunctionCall",
                              "src": "13067:26:63"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nativeSrc": "13105:9:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13105:9:63"
                                },
                                {
                                  "name": "length",
                                  "nativeSrc": "13116:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13116:6:63"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nativeSrc": "13095:9:63",
                                "nodeType": "YulIdentifier",
                                "src": "13095:9:63"
                              },
                              "nativeSrc": "13095:28:63",
                              "nodeType": "YulFunctionCall",
                              "src": "13095:28:63"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nativeSrc": "13064:2:63",
                            "nodeType": "YulIdentifier",
                            "src": "13064:2:63"
                          },
                          "nativeSrc": "13064:60:63",
                          "nodeType": "YulFunctionCall",
                          "src": "13064:60:63"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nativeSrc": "13055:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "13055:5:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 15038,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13055:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15014,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12928:6:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15014,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "13027:6:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15011,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12974:4:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 15040,
                  "nodeType": "InlineAssembly",
                  "src": "12884:251:63"
                },
                {
                  "expression": {
                    "id": 15041,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15038,
                    "src": "13152:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 15018,
                  "id": 15042,
                  "nodeType": "Return",
                  "src": "13145:12:63"
                }
              ]
            },
            "id": 15044,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "startsWith",
            "nameLocation": "12612:10:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15011,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "12636:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15044,
                  "src": "12623:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15010,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15009,
                      "name": "Slice",
                      "nameLocations": [
                        "12623:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "12623:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "12623:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15014,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "12655:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15044,
                  "src": "12642:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15013,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15012,
                      "name": "Slice",
                      "nameLocations": [
                        "12642:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "12642:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "12642:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12622:40:63"
            },
            "returnParameters": {
              "id": 15018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15017,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15044,
                  "src": "12686:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15016,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12686:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12685:6:63"
            },
            "scope": 15980,
            "src": "12603:562:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15096,
              "nodeType": "Block",
              "src": "13539:589:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15056,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15047,
                        "src": "13554:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15057,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13559:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "13554:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15058,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15050,
                        "src": "13566:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15059,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13573:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "13566:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13554:23:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15064,
                  "nodeType": "IfStatement",
                  "src": "13550:67:63",
                  "trueBody": {
                    "id": 15063,
                    "nodeType": "Block",
                    "src": "13579:38:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15061,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15047,
                          "src": "13601:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "functionReturnParameters": 15055,
                        "id": 15062,
                        "nodeType": "Return",
                        "src": "13594:11:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15066
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15066,
                      "mutability": "mutable",
                      "name": "equal",
                      "nameLocation": "13634:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15096,
                      "src": "13629:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15065,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13629:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15068,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 15067,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13642:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13629:17:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15073,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15069,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15047,
                        "src": "13661:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15070,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13666:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "13661:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 15071,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15050,
                        "src": "13674:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15072,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13681:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "13674:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13661:24:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15076,
                  "nodeType": "IfStatement",
                  "src": "13657:327:63",
                  "trueBody": {
                    "id": 15075,
                    "nodeType": "Block",
                    "src": "13687:297:63",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "13711:262:63",
                          "nodeType": "YulBlock",
                          "src": "13711:262:63",
                          "statements": [
                            {
                              "nativeSrc": "13730:27:63",
                              "nodeType": "YulVariableDeclaration",
                              "src": "13730:27:63",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nativeSrc": "13750:6:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "13750:6:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "13744:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13744:5:63"
                                },
                                "nativeSrc": "13744:13:63",
                                "nodeType": "YulFunctionCall",
                                "src": "13744:13:63"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nativeSrc": "13734:6:63",
                                  "nodeType": "YulTypedName",
                                  "src": "13734:6:63",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "13775:37:63",
                              "nodeType": "YulVariableDeclaration",
                              "src": "13775:37:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "self",
                                        "nativeSrc": "13800:4:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13800:4:63"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "13806:4:63",
                                        "nodeType": "YulLiteral",
                                        "src": "13806:4:63",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "13796:3:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "13796:3:63"
                                    },
                                    "nativeSrc": "13796:15:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "13796:15:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "13790:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13790:5:63"
                                },
                                "nativeSrc": "13790:22:63",
                                "nodeType": "YulFunctionCall",
                                "src": "13790:22:63"
                              },
                              "variables": [
                                {
                                  "name": "selfptr",
                                  "nativeSrc": "13779:7:63",
                                  "nodeType": "YulTypedName",
                                  "src": "13779:7:63",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "13830:41:63",
                              "nodeType": "YulVariableDeclaration",
                              "src": "13830:41:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nativeSrc": "13857:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13857:6:63"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "13865:4:63",
                                        "nodeType": "YulLiteral",
                                        "src": "13865:4:63",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "13853:3:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "13853:3:63"
                                    },
                                    "nativeSrc": "13853:17:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "13853:17:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "13847:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13847:5:63"
                                },
                                "nativeSrc": "13847:24:63",
                                "nodeType": "YulFunctionCall",
                                "src": "13847:24:63"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nativeSrc": "13834:9:63",
                                  "nodeType": "YulTypedName",
                                  "src": "13834:9:63",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "13889:69:63",
                              "nodeType": "YulAssignment",
                              "src": "13889:69:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nativeSrc": "13911:7:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13911:7:63"
                                      },
                                      {
                                        "name": "length",
                                        "nativeSrc": "13920:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13920:6:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "13901:9:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "13901:9:63"
                                    },
                                    "nativeSrc": "13901:26:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "13901:26:63"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nativeSrc": "13939:9:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13939:9:63"
                                      },
                                      {
                                        "name": "length",
                                        "nativeSrc": "13950:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "13950:6:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "13929:9:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "13929:9:63"
                                    },
                                    "nativeSrc": "13929:28:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "13929:28:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nativeSrc": "13898:2:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13898:2:63"
                                },
                                "nativeSrc": "13898:60:63",
                                "nodeType": "YulFunctionCall",
                                "src": "13898:60:63"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nativeSrc": "13889:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "13889:5:63"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 15066,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13889:5:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15050,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13750:6:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15050,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13857:6:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15047,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13800:4:63",
                            "valueSize": 1
                          }
                        ],
                        "id": 15074,
                        "nodeType": "InlineAssembly",
                        "src": "13702:271:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 15077,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15066,
                    "src": "14000:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15093,
                  "nodeType": "IfStatement",
                  "src": "13996:101:63",
                  "trueBody": {
                    "id": 15092,
                    "nodeType": "Block",
                    "src": "14007:90:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15078,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15047,
                              "src": "14022:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15080,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "14027:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "14022:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 15081,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15050,
                              "src": "14035:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15082,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14042:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "14035:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14022:24:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15084,
                        "nodeType": "ExpressionStatement",
                        "src": "14022:24:63"
                      },
                      {
                        "expression": {
                          "id": 15090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15085,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15047,
                              "src": "14061:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15087,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "14066:4:63",
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14155,
                            "src": "14061:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 15088,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15050,
                              "src": "14074:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15089,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14081:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "14074:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14061:24:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15091,
                        "nodeType": "ExpressionStatement",
                        "src": "14061:24:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 15094,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15047,
                    "src": "14116:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15055,
                  "id": 15095,
                  "nodeType": "Return",
                  "src": "14109:11:63"
                }
              ]
            },
            "id": 15097,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beyond",
            "nameLocation": "13455:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15051,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15047,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "13475:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15097,
                  "src": "13462:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15046,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15045,
                      "name": "Slice",
                      "nameLocations": [
                        "13462:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "13462:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "13462:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15050,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "13494:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15097,
                  "src": "13481:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15049,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15048,
                      "name": "Slice",
                      "nameLocations": [
                        "13481:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "13481:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "13481:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13461:40:63"
            },
            "returnParameters": {
              "id": 15055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15054,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15097,
                  "src": "13525:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15053,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15052,
                      "name": "Slice",
                      "nameLocations": [
                        "13525:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "13525:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "13525:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13524:14:63"
            },
            "scope": 15980,
            "src": "13446:682:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15142,
              "nodeType": "Block",
              "src": "14473:485:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15108,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15100,
                        "src": "14488:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15109,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14493:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "14488:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15110,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15103,
                        "src": "14500:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15111,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14507:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "14500:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14488:23:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15116,
                  "nodeType": "IfStatement",
                  "src": "14484:68:63",
                  "trueBody": {
                    "id": 15115,
                    "nodeType": "Block",
                    "src": "14513:39:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 15113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14535:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 15107,
                        "id": 15114,
                        "nodeType": "Return",
                        "src": "14528:12:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15118
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15118,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nameLocation": "14569:7:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15142,
                      "src": "14564:12:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15117,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14564:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15127,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15123,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 15119,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15100,
                          "src": "14579:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15120,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14584:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "14579:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 15121,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15100,
                          "src": "14591:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15122,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14596:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "14591:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "14579:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 15124,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15103,
                        "src": "14603:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15125,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14610:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "14603:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14579:35:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14564:50:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15128,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15118,
                      "src": "14631:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 15129,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15103,
                        "src": "14642:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15130,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14649:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "14642:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14631:22:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15135,
                  "nodeType": "IfStatement",
                  "src": "14627:66:63",
                  "trueBody": {
                    "id": 15134,
                    "nodeType": "Block",
                    "src": "14655:38:63",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 15132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14677:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 15107,
                        "id": 15133,
                        "nodeType": "Return",
                        "src": "14670:11:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15137,
                      "mutability": "mutable",
                      "name": "equal",
                      "nameLocation": "14710:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15142,
                      "src": "14705:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15136,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14705:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15138,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14705:10:63"
                },
                {
                  "AST": {
                    "nativeSrc": "14735:191:63",
                    "nodeType": "YulBlock",
                    "src": "14735:191:63",
                    "statements": [
                      {
                        "nativeSrc": "14750:27:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "14750:27:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nativeSrc": "14770:6:63",
                              "nodeType": "YulIdentifier",
                              "src": "14770:6:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "14764:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "14764:5:63"
                          },
                          "nativeSrc": "14764:13:63",
                          "nodeType": "YulFunctionCall",
                          "src": "14764:13:63"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nativeSrc": "14754:6:63",
                            "nodeType": "YulTypedName",
                            "src": "14754:6:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "14791:41:63",
                        "nodeType": "YulVariableDeclaration",
                        "src": "14791:41:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nativeSrc": "14818:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "14818:6:63"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "14826:4:63",
                                  "nodeType": "YulLiteral",
                                  "src": "14826:4:63",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "14814:3:63",
                                "nodeType": "YulIdentifier",
                                "src": "14814:3:63"
                              },
                              "nativeSrc": "14814:17:63",
                              "nodeType": "YulFunctionCall",
                              "src": "14814:17:63"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "14808:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "14808:5:63"
                          },
                          "nativeSrc": "14808:24:63",
                          "nodeType": "YulFunctionCall",
                          "src": "14808:24:63"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nativeSrc": "14795:9:63",
                            "nodeType": "YulTypedName",
                            "src": "14795:9:63",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nativeSrc": "14846:69:63",
                        "nodeType": "YulAssignment",
                        "src": "14846:69:63",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nativeSrc": "14868:7:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "14868:7:63"
                                },
                                {
                                  "name": "length",
                                  "nativeSrc": "14877:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "14877:6:63"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nativeSrc": "14858:9:63",
                                "nodeType": "YulIdentifier",
                                "src": "14858:9:63"
                              },
                              "nativeSrc": "14858:26:63",
                              "nodeType": "YulFunctionCall",
                              "src": "14858:26:63"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nativeSrc": "14896:9:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "14896:9:63"
                                },
                                {
                                  "name": "length",
                                  "nativeSrc": "14907:6:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "14907:6:63"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nativeSrc": "14886:9:63",
                                "nodeType": "YulIdentifier",
                                "src": "14886:9:63"
                              },
                              "nativeSrc": "14886:28:63",
                              "nodeType": "YulFunctionCall",
                              "src": "14886:28:63"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nativeSrc": "14855:2:63",
                            "nodeType": "YulIdentifier",
                            "src": "14855:2:63"
                          },
                          "nativeSrc": "14855:60:63",
                          "nodeType": "YulFunctionCall",
                          "src": "14855:60:63"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nativeSrc": "14846:5:63",
                            "nodeType": "YulIdentifier",
                            "src": "14846:5:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 15137,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14846:5:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15103,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14770:6:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15103,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14818:6:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15118,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14868:7:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 15139,
                  "nodeType": "InlineAssembly",
                  "src": "14726:200:63"
                },
                {
                  "expression": {
                    "id": 15140,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15137,
                    "src": "14945:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 15107,
                  "id": 15141,
                  "nodeType": "Return",
                  "src": "14938:12:63"
                }
              ]
            },
            "id": 15143,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endsWith",
            "nameLocation": "14395:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15100,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "14417:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15143,
                  "src": "14404:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15099,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15098,
                      "name": "Slice",
                      "nameLocations": [
                        "14404:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "14404:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "14404:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15103,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "14436:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15143,
                  "src": "14423:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15102,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15101,
                      "name": "Slice",
                      "nameLocations": [
                        "14423:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "14423:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "14423:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14403:40:63"
            },
            "returnParameters": {
              "id": 15107,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15106,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15143,
                  "src": "14467:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15105,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14467:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14466:6:63"
            },
            "scope": 15980,
            "src": "14386:572:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15198,
              "nodeType": "Block",
              "src": "15323:554:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15155,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15146,
                        "src": "15338:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15156,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15343:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "15338:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15157,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15149,
                        "src": "15350:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15158,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15357:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "15350:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15338:23:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15163,
                  "nodeType": "IfStatement",
                  "src": "15334:67:63",
                  "trueBody": {
                    "id": 15162,
                    "nodeType": "Block",
                    "src": "15363:38:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15160,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15146,
                          "src": "15385:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "functionReturnParameters": 15154,
                        "id": 15161,
                        "nodeType": "Return",
                        "src": "15378:11:63"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    15165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15165,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nameLocation": "15418:7:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15198,
                      "src": "15413:12:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15164,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15413:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15174,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15173,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 15166,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15146,
                          "src": "15428:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15167,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15433:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "15428:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 15168,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15146,
                          "src": "15440:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15169,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15445:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "15440:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "15428:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 15171,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15149,
                        "src": "15452:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15172,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15459:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "15452:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15428:35:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15413:50:63"
                },
                {
                  "assignments": [
                    15176
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15176,
                      "mutability": "mutable",
                      "name": "equal",
                      "nameLocation": "15479:5:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15198,
                      "src": "15474:10:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 15175,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "15474:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15178,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 15177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "15487:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15474:17:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15179,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15165,
                      "src": "15506:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 15180,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15149,
                        "src": "15517:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15181,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15524:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "15517:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15506:22:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15185,
                  "nodeType": "IfStatement",
                  "src": "15502:270:63",
                  "trueBody": {
                    "id": 15184,
                    "nodeType": "Block",
                    "src": "15530:242:63",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "15554:207:63",
                          "nodeType": "YulBlock",
                          "src": "15554:207:63",
                          "statements": [
                            {
                              "nativeSrc": "15573:27:63",
                              "nodeType": "YulVariableDeclaration",
                              "src": "15573:27:63",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nativeSrc": "15593:6:63",
                                    "nodeType": "YulIdentifier",
                                    "src": "15593:6:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "15587:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "15587:5:63"
                                },
                                "nativeSrc": "15587:13:63",
                                "nodeType": "YulFunctionCall",
                                "src": "15587:13:63"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nativeSrc": "15577:6:63",
                                  "nodeType": "YulTypedName",
                                  "src": "15577:6:63",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "15618:41:63",
                              "nodeType": "YulVariableDeclaration",
                              "src": "15618:41:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nativeSrc": "15645:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "15645:6:63"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "15653:4:63",
                                        "nodeType": "YulLiteral",
                                        "src": "15653:4:63",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "15641:3:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "15641:3:63"
                                    },
                                    "nativeSrc": "15641:17:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15641:17:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "15635:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "15635:5:63"
                                },
                                "nativeSrc": "15635:24:63",
                                "nodeType": "YulFunctionCall",
                                "src": "15635:24:63"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nativeSrc": "15622:9:63",
                                  "nodeType": "YulTypedName",
                                  "src": "15622:9:63",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "15677:69:63",
                              "nodeType": "YulAssignment",
                              "src": "15677:69:63",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nativeSrc": "15699:7:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "15699:7:63"
                                      },
                                      {
                                        "name": "length",
                                        "nativeSrc": "15708:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "15708:6:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "15689:9:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "15689:9:63"
                                    },
                                    "nativeSrc": "15689:26:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15689:26:63"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nativeSrc": "15727:9:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "15727:9:63"
                                      },
                                      {
                                        "name": "length",
                                        "nativeSrc": "15738:6:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "15738:6:63"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "15717:9:63",
                                      "nodeType": "YulIdentifier",
                                      "src": "15717:9:63"
                                    },
                                    "nativeSrc": "15717:28:63",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15717:28:63"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nativeSrc": "15686:2:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "15686:2:63"
                                },
                                "nativeSrc": "15686:60:63",
                                "nodeType": "YulFunctionCall",
                                "src": "15686:60:63"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nativeSrc": "15677:5:63",
                                  "nodeType": "YulIdentifier",
                                  "src": "15677:5:63"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 15176,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15677:5:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15149,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15593:6:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15149,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15645:6:63",
                            "valueSize": 1
                          },
                          {
                            "declaration": 15165,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15699:7:63",
                            "valueSize": 1
                          }
                        ],
                        "id": 15183,
                        "nodeType": "InlineAssembly",
                        "src": "15545:216:63"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 15186,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15176,
                    "src": "15788:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15195,
                  "nodeType": "IfStatement",
                  "src": "15784:62:63",
                  "trueBody": {
                    "id": 15194,
                    "nodeType": "Block",
                    "src": "15795:51:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15187,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15146,
                              "src": "15810:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15189,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "15815:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "15810:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 15190,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15149,
                              "src": "15823:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15191,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15830:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "15823:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15810:24:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15193,
                        "nodeType": "ExpressionStatement",
                        "src": "15810:24:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 15196,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15146,
                    "src": "15865:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15154,
                  "id": 15197,
                  "nodeType": "Return",
                  "src": "15858:11:63"
                }
              ]
            },
            "id": 15199,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "until",
            "nameLocation": "15240:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15146,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "15259:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15199,
                  "src": "15246:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15145,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15144,
                      "name": "Slice",
                      "nameLocations": [
                        "15246:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "15246:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "15246:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15149,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "15278:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15199,
                  "src": "15265:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15148,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15147,
                      "name": "Slice",
                      "nameLocations": [
                        "15265:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "15265:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "15265:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15245:40:63"
            },
            "returnParameters": {
              "id": 15154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15153,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15199,
                  "src": "15309:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15152,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15151,
                      "name": "Slice",
                      "nameLocations": [
                        "15309:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "15309:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "15309:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15308:14:63"
            },
            "scope": 15980,
            "src": "15231:646:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15328,
              "nodeType": "Block",
              "src": "16143:1388:63",
              "statements": [
                {
                  "assignments": [
                    15213
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15213,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "16159:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15328,
                      "src": "16154:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15212,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16154:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15215,
                  "initialValue": {
                    "id": 15214,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15203,
                    "src": "16165:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16154:18:63"
                },
                {
                  "assignments": [
                    15217
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15217,
                      "mutability": "mutable",
                      "name": "idx",
                      "nameLocation": "16188:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15328,
                      "src": "16183:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15216,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "16183:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15218,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16183:8:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15219,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15205,
                      "src": "16208:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 15220,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15201,
                      "src": "16221:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16208:20:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15323,
                  "nodeType": "IfStatement",
                  "src": "16204:1285:63",
                  "trueBody": {
                    "id": 15322,
                    "nodeType": "Block",
                    "src": "16230:1259:63",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15224,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 15222,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15205,
                            "src": "16249:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 15223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16262:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "16249:15:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 15320,
                          "nodeType": "Block",
                          "src": "17000:478:63",
                          "statements": [
                            {
                              "assignments": [
                                15289
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15289,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nameLocation": "17077:4:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15320,
                                  "src": "17069:12:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15288,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17069:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15290,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17069:12:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "17109:43:63",
                                "nodeType": "YulBlock",
                                "src": "17109:43:63",
                                "statements": [
                                  {
                                    "nativeSrc": "17111:39:63",
                                    "nodeType": "YulAssignment",
                                    "src": "17111:39:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nativeSrc": "17129:9:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "17129:9:63"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nativeSrc": "17140:9:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "17140:9:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nativeSrc": "17119:9:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "17119:9:63"
                                      },
                                      "nativeSrc": "17119:31:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "17119:31:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nativeSrc": "17111:4:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "17111:4:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15289,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17111:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15205,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17140:9:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15207,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17129:9:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15291,
                              "nodeType": "InlineAssembly",
                              "src": "17100:52:63"
                            },
                            {
                              "body": {
                                "id": 15318,
                                "nodeType": "Block",
                                "src": "17221:242:63",
                                "statements": [
                                  {
                                    "assignments": [
                                      15305
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 15305,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nameLocation": "17252:8:63",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 15318,
                                        "src": "17244:16:63",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 15304,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "17244:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 15306,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "17244:16:63"
                                  },
                                  {
                                    "AST": {
                                      "nativeSrc": "17292:41:63",
                                      "nodeType": "YulBlock",
                                      "src": "17292:41:63",
                                      "statements": [
                                        {
                                          "nativeSrc": "17294:37:63",
                                          "nodeType": "YulAssignment",
                                          "src": "17294:37:63",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nativeSrc": "17316:3:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "17316:3:63"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nativeSrc": "17321:9:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "17321:9:63"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nativeSrc": "17306:9:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "17306:9:63"
                                            },
                                            "nativeSrc": "17306:25:63",
                                            "nodeType": "YulFunctionCall",
                                            "src": "17306:25:63"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nativeSrc": "17294:8:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "17294:8:63"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "paris",
                                    "externalReferences": [
                                      {
                                        "declaration": 15205,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17321:9:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15213,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17316:3:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15305,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17294:8:63",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 15307,
                                    "nodeType": "InlineAssembly",
                                    "src": "17283:50:63"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 15310,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 15308,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15289,
                                        "src": "17359:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 15309,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15305,
                                        "src": "17367:8:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "17359:16:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 15313,
                                    "nodeType": "IfStatement",
                                    "src": "17355:57:63",
                                    "trueBody": {
                                      "expression": {
                                        "id": 15311,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15213,
                                        "src": "17409:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 15211,
                                      "id": 15312,
                                      "nodeType": "Return",
                                      "src": "17402:10:63"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15316,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 15314,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15213,
                                        "src": "17435:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 15315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17442:1:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "17435:8:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 15317,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17435:8:63"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15296,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15217,
                                  "src": "17186:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15299,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 15297,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15201,
                                    "src": "17193:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 15298,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15205,
                                    "src": "17203:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17193:19:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17186:26:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15319,
                              "initializationExpression": {
                                "expression": {
                                  "id": 15294,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 15292,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15217,
                                    "src": "17177:3:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "30",
                                    "id": 15293,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "17183:1:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "17177:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 15295,
                                "nodeType": "ExpressionStatement",
                                "src": "17177:7:63"
                              },
                              "isSimpleCounterLoop": false,
                              "loopExpression": {
                                "expression": {
                                  "id": 15302,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "17214:5:63",
                                  "subExpression": {
                                    "id": 15301,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15217,
                                    "src": "17214:3:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 15303,
                                "nodeType": "ExpressionStatement",
                                "src": "17214:5:63"
                              },
                              "nodeType": "ForStatement",
                              "src": "17172:291:63"
                            }
                          ]
                        },
                        "id": 15321,
                        "nodeType": "IfStatement",
                        "src": "16245:1233:63",
                        "trueBody": {
                          "id": 15287,
                          "nodeType": "Block",
                          "src": "16266:728:63",
                          "statements": [
                            {
                              "assignments": [
                                15226
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15226,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nameLocation": "16293:4:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15287,
                                  "src": "16285:12:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15225,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16285:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15227,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16285:12:63"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15230,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15228,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15205,
                                  "src": "16320:9:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 15229,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16332:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "16320:13:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15251,
                              "nodeType": "IfStatement",
                              "src": "16316:112:63",
                              "trueBody": {
                                "id": 15250,
                                "nodeType": "Block",
                                "src": "16335:93:63",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 15248,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 15231,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15226,
                                        "src": "16358:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "id": 15246,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "~",
                                            "prefix": true,
                                            "src": "16373:34:63",
                                            "subExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 15244,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 15242,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "hexValue": "32",
                                                      "id": 15234,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "16375:1:63",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_2_by_1",
                                                        "typeString": "int_const 2"
                                                      },
                                                      "value": "2"
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "**",
                                                    "rightExpression": {
                                                      "components": [
                                                        {
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "id": 15240,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "leftExpression": {
                                                            "hexValue": "38",
                                                            "id": 15235,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "16381:1:63",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_rational_8_by_1",
                                                              "typeString": "int_const 8"
                                                            },
                                                            "value": "8"
                                                          },
                                                          "nodeType": "BinaryOperation",
                                                          "operator": "*",
                                                          "rightExpression": {
                                                            "components": [
                                                              {
                                                                "commonType": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                },
                                                                "id": 15238,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                  "hexValue": "3332",
                                                                  "id": 15236,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "kind": "number",
                                                                  "lValueRequested": false,
                                                                  "nodeType": "Literal",
                                                                  "src": "16386:2:63",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_32_by_1",
                                                                    "typeString": "int_const 32"
                                                                  },
                                                                  "value": "32"
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                  "id": 15237,
                                                                  "name": "needlelen",
                                                                  "nodeType": "Identifier",
                                                                  "overloadedDeclarations": [],
                                                                  "referencedDeclaration": 15205,
                                                                  "src": "16391:9:63",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                  }
                                                                },
                                                                "src": "16386:14:63",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              }
                                                            ],
                                                            "id": 15239,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "16385:16:63",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "src": "16381:20:63",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        }
                                                      ],
                                                      "id": 15241,
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "TupleExpression",
                                                      "src": "16380:22:63",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "src": "16375:27:63",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "-",
                                                  "rightExpression": {
                                                    "hexValue": "31",
                                                    "id": 15243,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "16405:1:63",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_1_by_1",
                                                      "typeString": "int_const 1"
                                                    },
                                                    "value": "1"
                                                  },
                                                  "src": "16375:31:63",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 15245,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "16374:33:63",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 15233,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "16365:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bytes32_$",
                                            "typeString": "type(bytes32)"
                                          },
                                          "typeName": {
                                            "id": 15232,
                                            "name": "bytes32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "16365:7:63",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 15247,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16365:43:63",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16358:50:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 15249,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16358:50:63"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                15253
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15253,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nameLocation": "16456:10:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15287,
                                  "src": "16448:18:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15252,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16448:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15254,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16448:18:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "16494:45:63",
                                "nodeType": "YulBlock",
                                "src": "16494:45:63",
                                "statements": [
                                  {
                                    "nativeSrc": "16496:41:63",
                                    "nodeType": "YulAssignment",
                                    "src": "16496:41:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nativeSrc": "16520:9:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "16520:9:63"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nativeSrc": "16514:5:63",
                                            "nodeType": "YulIdentifier",
                                            "src": "16514:5:63"
                                          },
                                          "nativeSrc": "16514:16:63",
                                          "nodeType": "YulFunctionCall",
                                          "src": "16514:16:63"
                                        },
                                        {
                                          "name": "mask",
                                          "nativeSrc": "16532:4:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "16532:4:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nativeSrc": "16510:3:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "16510:3:63"
                                      },
                                      "nativeSrc": "16510:27:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "16510:27:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nativeSrc": "16496:10:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "16496:10:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15226,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16532:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15253,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16496:10:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15207,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16520:9:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15255,
                              "nodeType": "InlineAssembly",
                              "src": "16485:54:63"
                            },
                            {
                              "assignments": [
                                15257
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15257,
                                  "mutability": "mutable",
                                  "name": "end",
                                  "nameLocation": "16564:3:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15287,
                                  "src": "16559:8:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 15256,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16559:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15263,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15262,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15260,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 15258,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15203,
                                    "src": "16570:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 15259,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15201,
                                    "src": "16580:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16570:17:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 15261,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15205,
                                  "src": "16590:9:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16570:29:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16559:40:63"
                            },
                            {
                              "assignments": [
                                15265
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15265,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nameLocation": "16626:7:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15287,
                                  "src": "16618:15:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15264,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16618:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15266,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16618:15:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "16661:36:63",
                                "nodeType": "YulBlock",
                                "src": "16661:36:63",
                                "statements": [
                                  {
                                    "nativeSrc": "16663:32:63",
                                    "nodeType": "YulAssignment",
                                    "src": "16663:32:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nativeSrc": "16684:3:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "16684:3:63"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nativeSrc": "16678:5:63",
                                            "nodeType": "YulIdentifier",
                                            "src": "16678:5:63"
                                          },
                                          "nativeSrc": "16678:10:63",
                                          "nodeType": "YulFunctionCall",
                                          "src": "16678:10:63"
                                        },
                                        {
                                          "name": "mask",
                                          "nativeSrc": "16690:4:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "16690:4:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nativeSrc": "16674:3:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "16674:3:63"
                                      },
                                      "nativeSrc": "16674:21:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "16674:21:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nativeSrc": "16663:7:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "16663:7:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15226,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16690:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15213,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16684:3:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15265,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16663:7:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15267,
                              "nodeType": "InlineAssembly",
                              "src": "16652:45:63"
                            },
                            {
                              "body": {
                                "id": 15283,
                                "nodeType": "Block",
                                "src": "16747:203:63",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 15273,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 15271,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15213,
                                        "src": "16774:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "id": 15272,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15257,
                                        "src": "16781:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "16774:10:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 15278,
                                    "nodeType": "IfStatement",
                                    "src": "16770:65:63",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 15276,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 15274,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15203,
                                          "src": "16818:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 15275,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15201,
                                          "src": "16828:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16818:17:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 15211,
                                      "id": 15277,
                                      "nodeType": "Return",
                                      "src": "16811:24:63"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15280,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "16858:5:63",
                                      "subExpression": {
                                        "id": 15279,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15213,
                                        "src": "16858:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 15281,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16858:5:63"
                                  },
                                  {
                                    "AST": {
                                      "nativeSrc": "16895:36:63",
                                      "nodeType": "YulBlock",
                                      "src": "16895:36:63",
                                      "statements": [
                                        {
                                          "nativeSrc": "16897:32:63",
                                          "nodeType": "YulAssignment",
                                          "src": "16897:32:63",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nativeSrc": "16918:3:63",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "16918:3:63"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nativeSrc": "16912:5:63",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16912:5:63"
                                                },
                                                "nativeSrc": "16912:10:63",
                                                "nodeType": "YulFunctionCall",
                                                "src": "16912:10:63"
                                              },
                                              {
                                                "name": "mask",
                                                "nativeSrc": "16924:4:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "16924:4:63"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nativeSrc": "16908:3:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "16908:3:63"
                                            },
                                            "nativeSrc": "16908:21:63",
                                            "nodeType": "YulFunctionCall",
                                            "src": "16908:21:63"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nativeSrc": "16897:7:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "16897:7:63"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "paris",
                                    "externalReferences": [
                                      {
                                        "declaration": 15226,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16924:4:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15213,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16918:3:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15265,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16897:7:63",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 15282,
                                    "nodeType": "InlineAssembly",
                                    "src": "16886:45:63"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 15270,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15268,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15265,
                                  "src": "16724:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 15269,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15253,
                                  "src": "16735:10:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "16724:21:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15284,
                              "nodeType": "WhileStatement",
                              "src": "16717:233:63"
                            },
                            {
                              "expression": {
                                "id": 15285,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15213,
                                "src": "16975:3:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 15211,
                              "id": 15286,
                              "nodeType": "Return",
                              "src": "16968:10:63"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15324,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15203,
                      "src": "17506:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 15325,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15201,
                      "src": "17516:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17506:17:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 15211,
                  "id": 15327,
                  "nodeType": "Return",
                  "src": "17499:24:63"
                }
              ]
            },
            "id": 15329,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "findPtr",
            "nameLocation": "16047:7:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15201,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nameLocation": "16060:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15329,
                  "src": "16055:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15200,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16055:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15203,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nameLocation": "16074:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15329,
                  "src": "16069:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15202,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16069:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15205,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nameLocation": "16088:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15329,
                  "src": "16083:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15204,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16083:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15207,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nameLocation": "16104:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15329,
                  "src": "16099:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15206,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16099:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16054:60:63"
            },
            "returnParameters": {
              "id": 15211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15210,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15329,
                  "src": "16137:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15209,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16137:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16136:6:63"
            },
            "scope": 15980,
            "src": "16038:1493:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 15454,
              "nodeType": "Block",
              "src": "17794:1390:63",
              "statements": [
                {
                  "assignments": [
                    15343
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15343,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "17810:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15454,
                      "src": "17805:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15342,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17805:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15344,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17805:8:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15345,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15335,
                      "src": "17830:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 15346,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15331,
                      "src": "17843:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17830:20:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15451,
                  "nodeType": "IfStatement",
                  "src": "17826:1326:63",
                  "trueBody": {
                    "id": 15450,
                    "nodeType": "Block",
                    "src": "17852:1300:63",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 15348,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15335,
                            "src": "17871:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 15349,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17884:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "17871:15:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 15448,
                          "nodeType": "Block",
                          "src": "18623:518:63",
                          "statements": [
                            {
                              "assignments": [
                                15415
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15415,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nameLocation": "18700:4:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15448,
                                  "src": "18692:12:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15414,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18692:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15416,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "18692:12:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "18732:43:63",
                                "nodeType": "YulBlock",
                                "src": "18732:43:63",
                                "statements": [
                                  {
                                    "nativeSrc": "18734:39:63",
                                    "nodeType": "YulAssignment",
                                    "src": "18734:39:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nativeSrc": "18752:9:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "18752:9:63"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nativeSrc": "18763:9:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "18763:9:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nativeSrc": "18742:9:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18742:9:63"
                                      },
                                      "nativeSrc": "18742:31:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "18742:31:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nativeSrc": "18734:4:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18734:4:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15415,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18734:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15335,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18763:9:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15337,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18752:9:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15417,
                              "nodeType": "InlineAssembly",
                              "src": "18723:52:63"
                            },
                            {
                              "expression": {
                                "id": 15425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 15418,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15343,
                                  "src": "18793:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15424,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 15419,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15333,
                                    "src": "18799:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 15422,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 15420,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15331,
                                          "src": "18810:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 15421,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15335,
                                          "src": "18820:9:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "18810:19:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 15423,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "18809:21:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18799:31:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18793:37:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 15426,
                              "nodeType": "ExpressionStatement",
                              "src": "18793:37:63"
                            },
                            {
                              "body": {
                                "id": 15446,
                                "nodeType": "Block",
                                "src": "18872:254:63",
                                "statements": [
                                  {
                                    "assignments": [
                                      15431
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 15431,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nameLocation": "18903:8:63",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 15446,
                                        "src": "18895:16:63",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 15430,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "18895:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 15432,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "18895:16:63"
                                  },
                                  {
                                    "AST": {
                                      "nativeSrc": "18943:41:63",
                                      "nodeType": "YulBlock",
                                      "src": "18943:41:63",
                                      "statements": [
                                        {
                                          "nativeSrc": "18945:37:63",
                                          "nodeType": "YulAssignment",
                                          "src": "18945:37:63",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nativeSrc": "18967:3:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "18967:3:63"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nativeSrc": "18972:9:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "18972:9:63"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nativeSrc": "18957:9:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18957:9:63"
                                            },
                                            "nativeSrc": "18957:25:63",
                                            "nodeType": "YulFunctionCall",
                                            "src": "18957:25:63"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nativeSrc": "18945:8:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18945:8:63"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "paris",
                                    "externalReferences": [
                                      {
                                        "declaration": 15335,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18972:9:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15343,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18967:3:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15431,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18945:8:63",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 15433,
                                    "nodeType": "InlineAssembly",
                                    "src": "18934:50:63"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 15436,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 15434,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15415,
                                        "src": "19010:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 15435,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15431,
                                        "src": "19018:8:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "19010:16:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 15441,
                                    "nodeType": "IfStatement",
                                    "src": "19006:69:63",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 15439,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 15437,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15343,
                                          "src": "19060:3:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 15438,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15335,
                                          "src": "19066:9:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "19060:15:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 15341,
                                      "id": 15440,
                                      "nodeType": "Return",
                                      "src": "19053:22:63"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 15442,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15343,
                                        "src": "19098:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 15443,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19105:1:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "19098:8:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 15445,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19098:8:63"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15427,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15343,
                                  "src": "18856:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 15428,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15333,
                                  "src": "18863:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18856:14:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15447,
                              "nodeType": "WhileStatement",
                              "src": "18849:277:63"
                            }
                          ]
                        },
                        "id": 15449,
                        "nodeType": "IfStatement",
                        "src": "17867:1274:63",
                        "trueBody": {
                          "id": 15413,
                          "nodeType": "Block",
                          "src": "17888:729:63",
                          "statements": [
                            {
                              "assignments": [
                                15352
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15352,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nameLocation": "17915:4:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15413,
                                  "src": "17907:12:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15351,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17907:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15353,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17907:12:63"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15356,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15354,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15335,
                                  "src": "17942:9:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 15355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "17954:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "17942:13:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15377,
                              "nodeType": "IfStatement",
                              "src": "17938:112:63",
                              "trueBody": {
                                "id": 15376,
                                "nodeType": "Block",
                                "src": "17957:93:63",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 15374,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 15357,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15352,
                                        "src": "17980:4:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "arguments": [
                                          {
                                            "id": 15372,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "~",
                                            "prefix": true,
                                            "src": "17995:34:63",
                                            "subExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 15370,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 15368,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "hexValue": "32",
                                                      "id": 15360,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "kind": "number",
                                                      "lValueRequested": false,
                                                      "nodeType": "Literal",
                                                      "src": "17997:1:63",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_2_by_1",
                                                        "typeString": "int_const 2"
                                                      },
                                                      "value": "2"
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "**",
                                                    "rightExpression": {
                                                      "components": [
                                                        {
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "id": 15366,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "leftExpression": {
                                                            "hexValue": "38",
                                                            "id": 15361,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "18003:1:63",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_rational_8_by_1",
                                                              "typeString": "int_const 8"
                                                            },
                                                            "value": "8"
                                                          },
                                                          "nodeType": "BinaryOperation",
                                                          "operator": "*",
                                                          "rightExpression": {
                                                            "components": [
                                                              {
                                                                "commonType": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                },
                                                                "id": 15364,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "leftExpression": {
                                                                  "hexValue": "3332",
                                                                  "id": 15362,
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": true,
                                                                  "kind": "number",
                                                                  "lValueRequested": false,
                                                                  "nodeType": "Literal",
                                                                  "src": "18008:2:63",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_32_by_1",
                                                                    "typeString": "int_const 32"
                                                                  },
                                                                  "value": "32"
                                                                },
                                                                "nodeType": "BinaryOperation",
                                                                "operator": "-",
                                                                "rightExpression": {
                                                                  "id": 15363,
                                                                  "name": "needlelen",
                                                                  "nodeType": "Identifier",
                                                                  "overloadedDeclarations": [],
                                                                  "referencedDeclaration": 15335,
                                                                  "src": "18013:9:63",
                                                                  "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                  }
                                                                },
                                                                "src": "18008:14:63",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              }
                                                            ],
                                                            "id": 15365,
                                                            "isConstant": false,
                                                            "isInlineArray": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "TupleExpression",
                                                            "src": "18007:16:63",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "src": "18003:20:63",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        }
                                                      ],
                                                      "id": 15367,
                                                      "isConstant": false,
                                                      "isInlineArray": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "TupleExpression",
                                                      "src": "18002:22:63",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "src": "17997:27:63",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "-",
                                                  "rightExpression": {
                                                    "hexValue": "31",
                                                    "id": 15369,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "18027:1:63",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_1_by_1",
                                                      "typeString": "int_const 1"
                                                    },
                                                    "value": "1"
                                                  },
                                                  "src": "17997:31:63",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 15371,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "17996:33:63",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 15359,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "17987:7:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bytes32_$",
                                            "typeString": "type(bytes32)"
                                          },
                                          "typeName": {
                                            "id": 15358,
                                            "name": "bytes32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "17987:7:63",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 15373,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "17987:43:63",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "17980:50:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 15375,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17980:50:63"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                15379
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15379,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nameLocation": "18078:10:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15413,
                                  "src": "18070:18:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15378,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18070:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15380,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "18070:18:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "18116:45:63",
                                "nodeType": "YulBlock",
                                "src": "18116:45:63",
                                "statements": [
                                  {
                                    "nativeSrc": "18118:41:63",
                                    "nodeType": "YulAssignment",
                                    "src": "18118:41:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nativeSrc": "18142:9:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18142:9:63"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nativeSrc": "18136:5:63",
                                            "nodeType": "YulIdentifier",
                                            "src": "18136:5:63"
                                          },
                                          "nativeSrc": "18136:16:63",
                                          "nodeType": "YulFunctionCall",
                                          "src": "18136:16:63"
                                        },
                                        {
                                          "name": "mask",
                                          "nativeSrc": "18154:4:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "18154:4:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nativeSrc": "18132:3:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18132:3:63"
                                      },
                                      "nativeSrc": "18132:27:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "18132:27:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nativeSrc": "18118:10:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18118:10:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15352,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18154:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15379,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18118:10:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15337,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18142:9:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15381,
                              "nodeType": "InlineAssembly",
                              "src": "18107:54:63"
                            },
                            {
                              "expression": {
                                "id": 15388,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 15382,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15343,
                                  "src": "18181:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15387,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 15385,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 15383,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15333,
                                      "src": "18187:7:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 15384,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15331,
                                      "src": "18197:7:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "18187:17:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 15386,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15335,
                                    "src": "18207:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "18187:29:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18181:35:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 15389,
                              "nodeType": "ExpressionStatement",
                              "src": "18181:35:63"
                            },
                            {
                              "assignments": [
                                15391
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 15391,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nameLocation": "18243:7:63",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 15413,
                                  "src": "18235:15:63",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 15390,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "18235:7:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 15392,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "18235:15:63"
                            },
                            {
                              "AST": {
                                "nativeSrc": "18278:36:63",
                                "nodeType": "YulBlock",
                                "src": "18278:36:63",
                                "statements": [
                                  {
                                    "nativeSrc": "18280:32:63",
                                    "nodeType": "YulAssignment",
                                    "src": "18280:32:63",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nativeSrc": "18301:3:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18301:3:63"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nativeSrc": "18295:5:63",
                                            "nodeType": "YulIdentifier",
                                            "src": "18295:5:63"
                                          },
                                          "nativeSrc": "18295:10:63",
                                          "nodeType": "YulFunctionCall",
                                          "src": "18295:10:63"
                                        },
                                        {
                                          "name": "mask",
                                          "nativeSrc": "18307:4:63",
                                          "nodeType": "YulIdentifier",
                                          "src": "18307:4:63"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nativeSrc": "18291:3:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18291:3:63"
                                      },
                                      "nativeSrc": "18291:21:63",
                                      "nodeType": "YulFunctionCall",
                                      "src": "18291:21:63"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nativeSrc": "18280:7:63",
                                        "nodeType": "YulIdentifier",
                                        "src": "18280:7:63"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 15352,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18307:4:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15343,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18301:3:63",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 15391,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "18280:7:63",
                                  "valueSize": 1
                                }
                              ],
                              "id": 15393,
                              "nodeType": "InlineAssembly",
                              "src": "18269:45:63"
                            },
                            {
                              "body": {
                                "id": 15407,
                                "nodeType": "Block",
                                "src": "18364:197:63",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 15399,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 15397,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15343,
                                        "src": "18391:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "id": 15398,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15333,
                                        "src": "18398:7:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "18391:14:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 15402,
                                    "nodeType": "IfStatement",
                                    "src": "18387:59:63",
                                    "trueBody": {
                                      "expression": {
                                        "id": 15400,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15333,
                                        "src": "18439:7:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 15341,
                                      "id": 15401,
                                      "nodeType": "Return",
                                      "src": "18432:14:63"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15404,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "18469:5:63",
                                      "subExpression": {
                                        "id": 15403,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 15343,
                                        "src": "18469:3:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 15405,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18469:5:63"
                                  },
                                  {
                                    "AST": {
                                      "nativeSrc": "18506:36:63",
                                      "nodeType": "YulBlock",
                                      "src": "18506:36:63",
                                      "statements": [
                                        {
                                          "nativeSrc": "18508:32:63",
                                          "nodeType": "YulAssignment",
                                          "src": "18508:32:63",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nativeSrc": "18529:3:63",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "18529:3:63"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nativeSrc": "18523:5:63",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "18523:5:63"
                                                },
                                                "nativeSrc": "18523:10:63",
                                                "nodeType": "YulFunctionCall",
                                                "src": "18523:10:63"
                                              },
                                              {
                                                "name": "mask",
                                                "nativeSrc": "18535:4:63",
                                                "nodeType": "YulIdentifier",
                                                "src": "18535:4:63"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nativeSrc": "18519:3:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18519:3:63"
                                            },
                                            "nativeSrc": "18519:21:63",
                                            "nodeType": "YulFunctionCall",
                                            "src": "18519:21:63"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nativeSrc": "18508:7:63",
                                              "nodeType": "YulIdentifier",
                                              "src": "18508:7:63"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "paris",
                                    "externalReferences": [
                                      {
                                        "declaration": 15352,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18535:4:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15343,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18529:3:63",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 15391,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18508:7:63",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 15406,
                                    "nodeType": "InlineAssembly",
                                    "src": "18497:45:63"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 15396,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15394,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15391,
                                  "src": "18341:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 15395,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15379,
                                  "src": "18352:10:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "18341:21:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 15408,
                              "nodeType": "WhileStatement",
                              "src": "18334:227:63"
                            },
                            {
                              "expression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 15411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 15409,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15343,
                                  "src": "18586:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 15410,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15335,
                                  "src": "18592:9:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "18586:15:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 15341,
                              "id": 15412,
                              "nodeType": "Return",
                              "src": "18579:22:63"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 15452,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15333,
                    "src": "19169:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 15341,
                  "id": 15453,
                  "nodeType": "Return",
                  "src": "19162:14:63"
                }
              ]
            },
            "id": 15455,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfindPtr",
            "nameLocation": "17697:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15331,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nameLocation": "17711:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15455,
                  "src": "17706:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15330,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17706:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15333,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nameLocation": "17725:7:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15455,
                  "src": "17720:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15332,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17720:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15335,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nameLocation": "17739:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15455,
                  "src": "17734:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15334,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17734:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15337,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nameLocation": "17755:9:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15455,
                  "src": "17750:14:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15336,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17750:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17705:60:63"
            },
            "returnParameters": {
              "id": 15341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15340,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15455,
                  "src": "17788:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15339,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17788:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17787:6:63"
            },
            "scope": 15980,
            "src": "17688:1496:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 15497,
              "nodeType": "Block",
              "src": "19621:172:63",
              "statements": [
                {
                  "assignments": [
                    15468
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15468,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "19637:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15497,
                      "src": "19632:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15467,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "19632:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15479,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 15470,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15458,
                          "src": "19651:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15471,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19656:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "19651:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15472,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15458,
                          "src": "19662:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15473,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19667:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "19662:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15474,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15461,
                          "src": "19673:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15475,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19680:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "19673:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15476,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15461,
                          "src": "19686:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15477,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19693:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "19686:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15469,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15329,
                      "src": "19643:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 15478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19643:55:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19632:66:63"
                },
                {
                  "expression": {
                    "id": 15487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15480,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15458,
                        "src": "19709:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15482,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "19714:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "19709:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 15483,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15468,
                        "src": "19722:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 15484,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15458,
                          "src": "19728:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15485,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19733:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "19728:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19722:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19709:28:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15488,
                  "nodeType": "ExpressionStatement",
                  "src": "19709:28:63"
                },
                {
                  "expression": {
                    "id": 15493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15489,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15458,
                        "src": "19748:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15491,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "19753:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "19748:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 15492,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15468,
                      "src": "19760:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19748:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15494,
                  "nodeType": "ExpressionStatement",
                  "src": "19748:15:63"
                },
                {
                  "expression": {
                    "id": 15495,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15458,
                    "src": "19781:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15466,
                  "id": 15496,
                  "nodeType": "Return",
                  "src": "19774:11:63"
                }
              ]
            },
            "id": 15498,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "find",
            "nameLocation": "19539:4:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15458,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "19557:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15498,
                  "src": "19544:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15457,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15456,
                      "name": "Slice",
                      "nameLocations": [
                        "19544:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "19544:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "19544:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15461,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "19576:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15498,
                  "src": "19563:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15460,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15459,
                      "name": "Slice",
                      "nameLocations": [
                        "19563:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "19563:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "19563:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19543:40:63"
            },
            "returnParameters": {
              "id": 15466,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15465,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15498,
                  "src": "19607:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15464,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15463,
                      "name": "Slice",
                      "nameLocations": [
                        "19607:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "19607:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "19607:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19606:14:63"
            },
            "scope": 15980,
            "src": "19530:263:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15534,
              "nodeType": "Block",
              "src": "20254:146:63",
              "statements": [
                {
                  "assignments": [
                    15511
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15511,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "20270:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15534,
                      "src": "20265:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15510,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20265:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15522,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 15513,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15501,
                          "src": "20285:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15514,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20290:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "20285:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15515,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15501,
                          "src": "20296:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15516,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20301:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "20296:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15517,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15504,
                          "src": "20307:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15518,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20314:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "20307:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15519,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15504,
                          "src": "20320:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15520,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20327:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "20320:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15512,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15455,
                      "src": "20276:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 15521,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20276:56:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20265:67:63"
                },
                {
                  "expression": {
                    "id": 15530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15523,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15501,
                        "src": "20343:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15525,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "20348:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "20343:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 15526,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15511,
                        "src": "20355:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 15527,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15501,
                          "src": "20361:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15528,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20366:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "20361:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20355:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20343:27:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15531,
                  "nodeType": "ExpressionStatement",
                  "src": "20343:27:63"
                },
                {
                  "expression": {
                    "id": 15532,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15501,
                    "src": "20388:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15509,
                  "id": 15533,
                  "nodeType": "Return",
                  "src": "20381:11:63"
                }
              ]
            },
            "id": 15535,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfind",
            "nameLocation": "20171:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15501,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "20190:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15535,
                  "src": "20177:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15500,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15499,
                      "name": "Slice",
                      "nameLocations": [
                        "20177:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20177:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20177:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15504,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "20209:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15535,
                  "src": "20196:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15503,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15502,
                      "name": "Slice",
                      "nameLocations": [
                        "20196:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20196:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20196:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20176:40:63"
            },
            "returnParameters": {
              "id": 15509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15508,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15535,
                  "src": "20240:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15507,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15506,
                      "name": "Slice",
                      "nameLocations": [
                        "20240:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20240:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20240:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20239:14:63"
            },
            "scope": 15980,
            "src": "20162:238:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15616,
              "nodeType": "Block",
              "src": "21030:404:63",
              "statements": [
                {
                  "assignments": [
                    15551
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15551,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "21046:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15616,
                      "src": "21041:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15550,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21041:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15562,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 15553,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15538,
                          "src": "21060:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15554,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21065:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "21060:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15555,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15538,
                          "src": "21071:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15556,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21076:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "21071:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15557,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15541,
                          "src": "21082:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15558,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21089:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "21082:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15559,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15541,
                          "src": "21095:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15560,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21102:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "21095:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15552,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15329,
                      "src": "21052:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 15561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21052:55:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21041:66:63"
                },
                {
                  "expression": {
                    "id": 15568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15563,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15544,
                        "src": "21118:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15565,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21124:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "21118:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 15566,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15538,
                        "src": "21131:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15567,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21136:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "21131:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21118:22:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15569,
                  "nodeType": "ExpressionStatement",
                  "src": "21118:22:63"
                },
                {
                  "expression": {
                    "id": 15577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15570,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15544,
                        "src": "21151:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15572,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21157:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "21151:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 15573,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15551,
                        "src": "21164:3:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 15574,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15538,
                          "src": "21170:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15575,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21175:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "21170:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21164:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21151:28:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15578,
                  "nodeType": "ExpressionStatement",
                  "src": "21151:28:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15579,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15551,
                      "src": "21194:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 15580,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15538,
                          "src": "21201:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15581,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21206:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "21201:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 15582,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15538,
                          "src": "21213:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15583,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21218:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "21213:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21201:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21194:28:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 15612,
                    "nodeType": "Block",
                    "src": "21296:108:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15601,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15593,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15538,
                              "src": "21311:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15595,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "21316:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "21311:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15600,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 15596,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15544,
                                "src": "21324:5:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15597,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21330:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "21324:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 15598,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15541,
                                "src": "21337:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15599,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21344:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "21337:11:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21324:24:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21311:37:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15602,
                        "nodeType": "ExpressionStatement",
                        "src": "21311:37:63"
                      },
                      {
                        "expression": {
                          "id": 15610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15603,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15538,
                              "src": "21363:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15605,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "21368:4:63",
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14155,
                            "src": "21363:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15609,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 15606,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15551,
                              "src": "21375:3:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 15607,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15541,
                                "src": "21381:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15608,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21388:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "21381:11:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21375:17:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "21363:29:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15611,
                        "nodeType": "ExpressionStatement",
                        "src": "21363:29:63"
                      }
                    ]
                  },
                  "id": 15613,
                  "nodeType": "IfStatement",
                  "src": "21190:214:63",
                  "trueBody": {
                    "id": 15592,
                    "nodeType": "Block",
                    "src": "21224:66:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15586,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15538,
                              "src": "21265:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15588,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "21270:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "21265:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 15589,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21277:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "21265:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15591,
                        "nodeType": "ExpressionStatement",
                        "src": "21265:13:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 15614,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15544,
                    "src": "21421:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15549,
                  "id": 15615,
                  "nodeType": "Return",
                  "src": "21414:12:63"
                }
              ]
            },
            "id": 15617,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nameLocation": "20927:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15538,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "20946:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15617,
                  "src": "20933:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15537,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15536,
                      "name": "Slice",
                      "nameLocations": [
                        "20933:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20933:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20933:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15541,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "20965:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15617,
                  "src": "20952:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15540,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15539,
                      "name": "Slice",
                      "nameLocations": [
                        "20952:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20952:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20952:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15544,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "20986:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15617,
                  "src": "20973:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15543,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15542,
                      "name": "Slice",
                      "nameLocations": [
                        "20973:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "20973:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "20973:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20932:60:63"
            },
            "returnParameters": {
              "id": 15549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15548,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15617,
                  "src": "21016:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15547,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15546,
                      "name": "Slice",
                      "nameLocations": [
                        "21016:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "21016:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "21016:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21015:14:63"
            },
            "scope": 15980,
            "src": "20918:516:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15635,
              "nodeType": "Block",
              "src": "22014:45:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15630,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15620,
                        "src": "22031:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      {
                        "id": 15631,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15623,
                        "src": "22037:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      {
                        "id": 15632,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15627,
                        "src": "22045:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      ],
                      "id": 15629,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15617,
                        15636
                      ],
                      "referencedDeclaration": 15617,
                      "src": "22025:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$returns$_t_struct$_Slice_$14156_memory_ptr_$",
                        "typeString": "function (struct Slices.Slice memory,struct Slices.Slice memory,struct Slices.Slice memory) pure returns (struct Slices.Slice memory)"
                      }
                    },
                    "id": 15633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22025:26:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "id": 15634,
                  "nodeType": "ExpressionStatement",
                  "src": "22025:26:63"
                }
              ]
            },
            "id": 15636,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nameLocation": "21925:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15620,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "21944:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15636,
                  "src": "21931:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15619,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15618,
                      "name": "Slice",
                      "nameLocations": [
                        "21931:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "21931:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "21931:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15623,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "21963:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15636,
                  "src": "21950:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15622,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15621,
                      "name": "Slice",
                      "nameLocations": [
                        "21950:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "21950:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "21950:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21930:40:63"
            },
            "returnParameters": {
              "id": 15628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15627,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "22007:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15636,
                  "src": "21994:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15626,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15625,
                      "name": "Slice",
                      "nameLocations": [
                        "21994:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "21994:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "21994:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21993:20:63"
            },
            "scope": 15980,
            "src": "21916:143:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15708,
              "nodeType": "Block",
              "src": "22689:357:63",
              "statements": [
                {
                  "assignments": [
                    15652
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15652,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "22705:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15708,
                      "src": "22700:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15651,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "22700:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15663,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 15654,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15639,
                          "src": "22720:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15655,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22725:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "22720:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15656,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15639,
                          "src": "22731:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15657,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22736:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "22731:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15658,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15642,
                          "src": "22742:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15659,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22749:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "22742:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15660,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15642,
                          "src": "22755:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15661,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22762:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "22755:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15653,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15455,
                      "src": "22711:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 15662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22711:56:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22700:67:63"
                },
                {
                  "expression": {
                    "id": 15668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15664,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15645,
                        "src": "22778:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15666,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22784:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "22778:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 15667,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15652,
                      "src": "22791:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22778:16:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15669,
                  "nodeType": "ExpressionStatement",
                  "src": "22778:16:63"
                },
                {
                  "expression": {
                    "id": 15681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 15670,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15645,
                        "src": "22805:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15672,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22811:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "22805:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 15673,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15639,
                          "src": "22818:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15674,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22823:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "22818:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15678,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 15675,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15652,
                              "src": "22831:3:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 15676,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15639,
                                "src": "22837:4:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15677,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22842:4:63",
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14155,
                              "src": "22837:9:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "22831:15:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 15679,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "22830:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "22818:29:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22805:42:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 15682,
                  "nodeType": "ExpressionStatement",
                  "src": "22805:42:63"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15683,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15652,
                      "src": "22862:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 15684,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15639,
                        "src": "22869:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15685,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22874:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "22869:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22862:16:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 15704,
                    "nodeType": "Block",
                    "src": "22952:64:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15694,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15639,
                              "src": "22967:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15696,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "22972:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "22967:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15701,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 15697,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15645,
                                "src": "22980:5:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15698,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22986:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "22980:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 15699,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15642,
                                "src": "22993:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15700,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "23000:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "22993:11:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "22980:24:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22967:37:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15703,
                        "nodeType": "ExpressionStatement",
                        "src": "22967:37:63"
                      }
                    ]
                  },
                  "id": 15705,
                  "nodeType": "IfStatement",
                  "src": "22858:158:63",
                  "trueBody": {
                    "id": 15693,
                    "nodeType": "Block",
                    "src": "22880:66:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 15687,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15639,
                              "src": "22921:4:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15689,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "22926:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "22921:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 15690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22933:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "22921:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15692,
                        "nodeType": "ExpressionStatement",
                        "src": "22921:13:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 15706,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15645,
                    "src": "23033:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "functionReturnParameters": 15650,
                  "id": 15707,
                  "nodeType": "Return",
                  "src": "23026:12:63"
                }
              ]
            },
            "id": 15709,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nameLocation": "22585:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15639,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "22605:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15709,
                  "src": "22592:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15638,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15637,
                      "name": "Slice",
                      "nameLocations": [
                        "22592:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "22592:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "22592:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15642,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "22624:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15709,
                  "src": "22611:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15641,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15640,
                      "name": "Slice",
                      "nameLocations": [
                        "22611:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "22611:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "22611:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15645,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "22645:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15709,
                  "src": "22632:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15644,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15643,
                      "name": "Slice",
                      "nameLocations": [
                        "22632:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "22632:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "22632:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22591:60:63"
            },
            "returnParameters": {
              "id": 15650,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15649,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15709,
                  "src": "22675:12:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15648,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15647,
                      "name": "Slice",
                      "nameLocations": [
                        "22675:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "22675:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "22675:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22674:14:63"
            },
            "scope": 15980,
            "src": "22576:470:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15727,
              "nodeType": "Block",
              "src": "23625:46:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15722,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15712,
                        "src": "23643:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      {
                        "id": 15723,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15715,
                        "src": "23649:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      {
                        "id": 15724,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15719,
                        "src": "23657:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      ],
                      "id": 15721,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        15709,
                        15728
                      ],
                      "referencedDeclaration": 15709,
                      "src": "23636:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$_t_struct$_Slice_$14156_memory_ptr_$returns$_t_struct$_Slice_$14156_memory_ptr_$",
                        "typeString": "function (struct Slices.Slice memory,struct Slices.Slice memory,struct Slices.Slice memory) pure returns (struct Slices.Slice memory)"
                      }
                    },
                    "id": 15725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23636:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                      "typeString": "struct Slices.Slice memory"
                    }
                  },
                  "id": 15726,
                  "nodeType": "ExpressionStatement",
                  "src": "23636:27:63"
                }
              ]
            },
            "id": 15728,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nameLocation": "23535:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15716,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15712,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "23555:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15728,
                  "src": "23542:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15711,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15710,
                      "name": "Slice",
                      "nameLocations": [
                        "23542:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "23542:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "23542:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15715,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "23574:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15728,
                  "src": "23561:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15714,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15713,
                      "name": "Slice",
                      "nameLocations": [
                        "23561:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "23561:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "23561:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23541:40:63"
            },
            "returnParameters": {
              "id": 15720,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15719,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "23618:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15728,
                  "src": "23605:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15718,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15717,
                      "name": "Slice",
                      "nameLocations": [
                        "23605:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "23605:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "23605:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23604:20:63"
            },
            "scope": 15980,
            "src": "23526:145:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15788,
              "nodeType": "Block",
              "src": "24036:282:63",
              "statements": [
                {
                  "assignments": [
                    15740
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15740,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "24052:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15788,
                      "src": "24047:8:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15739,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24047:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15754,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 15742,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15731,
                            "src": "24066:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15743,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24071:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "24066:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15744,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15731,
                            "src": "24077:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15745,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24082:4:63",
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14155,
                          "src": "24077:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15746,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15734,
                            "src": "24088:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15747,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24095:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "24088:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15748,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15734,
                            "src": "24101:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15749,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24108:4:63",
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14155,
                          "src": "24101:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 15741,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15329,
                        "src": "24058:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 15750,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24058:55:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 15751,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15734,
                        "src": "24116:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15752,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24123:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "24116:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24058:69:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24047:80:63"
                },
                {
                  "body": {
                    "id": 15786,
                    "nodeType": "Block",
                    "src": "24175:136:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 15763,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "24190:5:63",
                          "subExpression": {
                            "id": 15762,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15737,
                            "src": "24190:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15764,
                        "nodeType": "ExpressionStatement",
                        "src": "24190:5:63"
                      },
                      {
                        "expression": {
                          "id": 15784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 15765,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15740,
                            "src": "24210:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15783,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 15774,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 15767,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15731,
                                      "src": "24224:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                        "typeString": "struct Slices.Slice memory"
                                      }
                                    },
                                    "id": 15768,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "24229:4:63",
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 14153,
                                    "src": "24224:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 15772,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 15769,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 15740,
                                          "src": "24237:3:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 15770,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 15731,
                                            "src": "24243:4:63",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                              "typeString": "struct Slices.Slice memory"
                                            }
                                          },
                                          "id": 15771,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "24248:4:63",
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 14155,
                                          "src": "24243:9:63",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24237:15:63",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 15773,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "24236:17:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "24224:29:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 15775,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15740,
                                  "src": "24255:3:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 15776,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15734,
                                    "src": "24260:6:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                      "typeString": "struct Slices.Slice memory"
                                    }
                                  },
                                  "id": 15777,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24267:4:63",
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14153,
                                  "src": "24260:11:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 15778,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15734,
                                    "src": "24273:6:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                      "typeString": "struct Slices.Slice memory"
                                    }
                                  },
                                  "id": 15779,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "24280:4:63",
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14155,
                                  "src": "24273:11:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 15766,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15329,
                                "src": "24216:7:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 15780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "24216:69:63",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 15781,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15734,
                                "src": "24288:6:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15782,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "24295:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "24288:11:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "24216:83:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "24210:89:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15785,
                        "nodeType": "ExpressionStatement",
                        "src": "24210:89:63"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15755,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15740,
                      "src": "24145:3:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 15760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 15756,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15731,
                          "src": "24152:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15757,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24157:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "24152:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 15758,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15731,
                          "src": "24164:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15759,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24169:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "24164:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24152:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24145:28:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15787,
                  "nodeType": "WhileStatement",
                  "src": "24138:173:63"
                }
              ]
            },
            "id": 15789,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nameLocation": "23957:5:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15731,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "23976:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15789,
                  "src": "23963:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15730,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15729,
                      "name": "Slice",
                      "nameLocations": [
                        "23963:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "23963:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "23963:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15734,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "23995:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15789,
                  "src": "23982:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15733,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15732,
                      "name": "Slice",
                      "nameLocations": [
                        "23982:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "23982:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "23982:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23962:40:63"
            },
            "returnParameters": {
              "id": 15738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15737,
                  "mutability": "mutable",
                  "name": "cnt",
                  "nameLocation": "24031:3:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15789,
                  "src": "24026:8:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 15736,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "24026:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24025:10:63"
            },
            "scope": 15980,
            "src": "23948:370:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15814,
              "nodeType": "Block",
              "src": "24652:95:63",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 15801,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15792,
                            "src": "24679:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15802,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24684:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "24679:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15803,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15792,
                            "src": "24690:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15804,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24695:4:63",
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14155,
                          "src": "24690:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15805,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15795,
                            "src": "24701:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15806,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24708:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "24701:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 15807,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15795,
                            "src": "24714:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15808,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24721:4:63",
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14155,
                          "src": "24714:11:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 15800,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15455,
                        "src": "24670:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 15809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24670:56:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 15810,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15792,
                        "src": "24730:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24735:4:63",
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14155,
                      "src": "24730:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24670:69:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 15799,
                  "id": 15813,
                  "nodeType": "Return",
                  "src": "24663:76:63"
                }
              ]
            },
            "id": 15815,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contains",
            "nameLocation": "24574:8:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15792,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "24596:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15815,
                  "src": "24583:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15791,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15790,
                      "name": "Slice",
                      "nameLocations": [
                        "24583:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "24583:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "24583:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15795,
                  "mutability": "mutable",
                  "name": "needle",
                  "nameLocation": "24615:6:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15815,
                  "src": "24602:19:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15794,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15793,
                      "name": "Slice",
                      "nameLocations": [
                        "24602:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "24602:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "24602:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24582:40:63"
            },
            "returnParameters": {
              "id": 15799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15798,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15815,
                  "src": "24646:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 15797,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24646:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24645:6:63"
            },
            "scope": 15980,
            "src": "24565:182:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15862,
              "nodeType": "Block",
              "src": "25136:271:63",
              "statements": [
                {
                  "assignments": [
                    15827
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15827,
                      "mutability": "mutable",
                      "name": "ret",
                      "nameLocation": "25161:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15862,
                      "src": "25147:17:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 15826,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25147:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15836,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 15830,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15818,
                            "src": "25178:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15831,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "25183:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "25178:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 15832,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15821,
                            "src": "25190:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15833,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "25196:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "25190:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25178:22:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "25167:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 15828,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25171:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 15835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25167:34:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25147:54:63"
                },
                {
                  "assignments": [
                    15838
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15838,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nameLocation": "25217:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15862,
                      "src": "25212:11:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15837,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "25212:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15839,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25212:11:63"
                },
                {
                  "AST": {
                    "nativeSrc": "25243:26:63",
                    "nodeType": "YulBlock",
                    "src": "25243:26:63",
                    "statements": [
                      {
                        "nativeSrc": "25245:22:63",
                        "nodeType": "YulAssignment",
                        "src": "25245:22:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nativeSrc": "25259:3:63",
                              "nodeType": "YulIdentifier",
                              "src": "25259:3:63"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "25264:2:63",
                              "nodeType": "YulLiteral",
                              "src": "25264:2:63",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "25255:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "25255:3:63"
                          },
                          "nativeSrc": "25255:12:63",
                          "nodeType": "YulFunctionCall",
                          "src": "25255:12:63"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nativeSrc": "25245:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "25245:6:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 15827,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25259:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15838,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25245:6:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 15840,
                  "nodeType": "InlineAssembly",
                  "src": "25234:35:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 15842,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15838,
                        "src": "25287:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15843,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15818,
                          "src": "25295:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15844,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25300:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "25295:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15845,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15818,
                          "src": "25306:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15846,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25311:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "25306:9:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15841,
                      "name": "_memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14209,
                      "src": "25279:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 15847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25279:37:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15848,
                  "nodeType": "ExpressionStatement",
                  "src": "25279:37:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 15853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 15850,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15838,
                          "src": "25335:6:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 15851,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15818,
                            "src": "25344:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                              "typeString": "struct Slices.Slice memory"
                            }
                          },
                          "id": 15852,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "25349:4:63",
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14153,
                          "src": "25344:9:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "25335:18:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15854,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15821,
                          "src": "25355:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15855,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25361:4:63",
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14155,
                        "src": "25355:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 15856,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 15821,
                          "src": "25367:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15857,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25373:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "25367:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15849,
                      "name": "_memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14209,
                      "src": "25327:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 15858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25327:51:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15859,
                  "nodeType": "ExpressionStatement",
                  "src": "25327:51:63"
                },
                {
                  "expression": {
                    "id": 15860,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15827,
                    "src": "25396:3:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 15825,
                  "id": 15861,
                  "nodeType": "Return",
                  "src": "25389:10:63"
                }
              ]
            },
            "id": 15863,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nameLocation": "25052:6:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15818,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "25072:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15863,
                  "src": "25059:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15817,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15816,
                      "name": "Slice",
                      "nameLocations": [
                        "25059:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "25059:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "25059:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15821,
                  "mutability": "mutable",
                  "name": "other",
                  "nameLocation": "25091:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15863,
                  "src": "25078:18:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15820,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15819,
                      "name": "Slice",
                      "nameLocations": [
                        "25078:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "25078:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "25078:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25058:39:63"
            },
            "returnParameters": {
              "id": 15825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15824,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15863,
                  "src": "25121:13:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15823,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "25121:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25120:15:63"
            },
            "scope": 15980,
            "src": "25043:364:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15978,
              "nodeType": "Block",
              "src": "25846:659:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15878,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15875,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15870,
                        "src": "25861:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Slices.Slice memory[] memory"
                        }
                      },
                      "id": 15876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25867:6:63",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "25861:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 15877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25877:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25861:17:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15881,
                  "nodeType": "IfStatement",
                  "src": "25857:45:63",
                  "trueBody": {
                    "expression": {
                      "hexValue": "",
                      "id": 15879,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25900:2:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 15874,
                    "id": 15880,
                    "nodeType": "Return",
                    "src": "25893:9:63"
                  }
                },
                {
                  "assignments": [
                    15883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15883,
                      "mutability": "mutable",
                      "name": "length",
                      "nameLocation": "25920:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15978,
                      "src": "25915:11:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15882,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "25915:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15892,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 15884,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15866,
                        "src": "25929:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                          "typeString": "struct Slices.Slice memory"
                        }
                      },
                      "id": 15885,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25934:4:63",
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14153,
                      "src": "25929:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 15886,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15870,
                              "src": "25942:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct Slices.Slice memory[] memory"
                              }
                            },
                            "id": 15887,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "25948:6:63",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "25942:12:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 15888,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25957:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "25942:16:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 15890,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "25941:18:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25929:30:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25915:44:63"
                },
                {
                  "body": {
                    "expression": {
                      "id": 15909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 15904,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15883,
                        "src": "26022:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "expression": {
                          "baseExpression": {
                            "id": 15905,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15870,
                            "src": "26032:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct Slices.Slice memory[] memory"
                            }
                          },
                          "id": 15907,
                          "indexExpression": {
                            "id": 15906,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15894,
                            "src": "26038:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "26032:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                            "typeString": "struct Slices.Slice memory"
                          }
                        },
                        "id": 15908,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26041:4:63",
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14153,
                        "src": "26032:13:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "26022:23:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 15910,
                    "nodeType": "ExpressionStatement",
                    "src": "26022:23:63"
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15897,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15894,
                      "src": "25986:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15898,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15870,
                        "src": "25990:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Slices.Slice memory[] memory"
                        }
                      },
                      "id": 15899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25996:6:63",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "25990:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25986:16:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15911,
                  "initializationExpression": {
                    "assignments": [
                      15894
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 15894,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "25979:1:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 15911,
                        "src": "25974:6:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 15893,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "25974:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 15896,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 15895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25983:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25974:10:63"
                  },
                  "isSimpleCounterLoop": true,
                  "loopExpression": {
                    "expression": {
                      "id": 15902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26004:3:63",
                      "subExpression": {
                        "id": 15901,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15894,
                        "src": "26004:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 15903,
                    "nodeType": "ExpressionStatement",
                    "src": "26004:3:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "25970:75:63"
                },
                {
                  "assignments": [
                    15913
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15913,
                      "mutability": "mutable",
                      "name": "ret",
                      "nameLocation": "26072:3:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15978,
                      "src": "26058:17:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 15912,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "26058:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15918,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 15916,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15883,
                        "src": "26089:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 15915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "26078:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 15914,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "26082:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 15917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26078:18:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26058:38:63"
                },
                {
                  "assignments": [
                    15920
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 15920,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nameLocation": "26112:6:63",
                      "nodeType": "VariableDeclaration",
                      "scope": 15978,
                      "src": "26107:11:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 15919,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "26107:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 15921,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26107:11:63"
                },
                {
                  "AST": {
                    "nativeSrc": "26138:26:63",
                    "nodeType": "YulBlock",
                    "src": "26138:26:63",
                    "statements": [
                      {
                        "nativeSrc": "26140:22:63",
                        "nodeType": "YulAssignment",
                        "src": "26140:22:63",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nativeSrc": "26154:3:63",
                              "nodeType": "YulIdentifier",
                              "src": "26154:3:63"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "26159:2:63",
                              "nodeType": "YulLiteral",
                              "src": "26159:2:63",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "26150:3:63",
                            "nodeType": "YulIdentifier",
                            "src": "26150:3:63"
                          },
                          "nativeSrc": "26150:12:63",
                          "nodeType": "YulFunctionCall",
                          "src": "26150:12:63"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nativeSrc": "26140:6:63",
                            "nodeType": "YulIdentifier",
                            "src": "26140:6:63"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "paris",
                  "externalReferences": [
                    {
                      "declaration": 15913,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26154:3:63",
                      "valueSize": 1
                    },
                    {
                      "declaration": 15920,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "26140:6:63",
                      "valueSize": 1
                    }
                  ],
                  "id": 15922,
                  "nodeType": "InlineAssembly",
                  "src": "26129:35:63"
                },
                {
                  "body": {
                    "id": 15974,
                    "nodeType": "Block",
                    "src": "26215:260:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 15935,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15920,
                              "src": "26238:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 15936,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15870,
                                  "src": "26246:5:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Slices.Slice memory[] memory"
                                  }
                                },
                                "id": 15938,
                                "indexExpression": {
                                  "id": 15937,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15924,
                                  "src": "26252:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "26246:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15939,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26255:4:63",
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14155,
                              "src": "26246:13:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 15940,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15870,
                                  "src": "26261:5:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct Slices.Slice memory[] memory"
                                  }
                                },
                                "id": 15942,
                                "indexExpression": {
                                  "id": 15941,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15924,
                                  "src": "26267:1:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "26261:8:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                  "typeString": "struct Slices.Slice memory"
                                }
                              },
                              "id": 15943,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26270:4:63",
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 14153,
                              "src": "26261:13:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 15934,
                            "name": "_memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14209,
                            "src": "26230:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 15944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26230:45:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 15945,
                        "nodeType": "ExpressionStatement",
                        "src": "26230:45:63"
                      },
                      {
                        "expression": {
                          "id": 15951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 15946,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15920,
                            "src": "26290:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 15947,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15870,
                                "src": "26300:5:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct Slices.Slice memory[] memory"
                                }
                              },
                              "id": 15949,
                              "indexExpression": {
                                "id": 15948,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15924,
                                "src": "26306:1:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26300:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                "typeString": "struct Slices.Slice memory"
                              }
                            },
                            "id": 15950,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "26309:4:63",
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14153,
                            "src": "26300:13:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26290:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 15952,
                        "nodeType": "ExpressionStatement",
                        "src": "26290:23:63"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 15958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 15953,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 15924,
                            "src": "26332:1:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 15957,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 15954,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 15870,
                                "src": "26336:5:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct Slices.Slice memory[] memory"
                                }
                              },
                              "id": 15955,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26342:6:63",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "26336:12:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 15956,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26351:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "26336:16:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26332:20:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 15973,
                        "nodeType": "IfStatement",
                        "src": "26328:136:63",
                        "trueBody": {
                          "id": 15972,
                          "nodeType": "Block",
                          "src": "26354:110:63",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 15960,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15920,
                                    "src": "26381:6:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15961,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15866,
                                      "src": "26389:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                        "typeString": "struct Slices.Slice memory"
                                      }
                                    },
                                    "id": 15962,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "26394:4:63",
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 14155,
                                    "src": "26389:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 15963,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 15866,
                                      "src": "26400:4:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                        "typeString": "struct Slices.Slice memory"
                                      }
                                    },
                                    "id": 15964,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "26405:4:63",
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 14153,
                                    "src": "26400:9:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 15959,
                                  "name": "_memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14209,
                                  "src": "26373:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 15965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26373:37:63",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 15966,
                              "nodeType": "ExpressionStatement",
                              "src": "26373:37:63"
                            },
                            {
                              "expression": {
                                "id": 15970,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 15967,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 15920,
                                  "src": "26429:6:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 15968,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 15866,
                                    "src": "26439:4:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                                      "typeString": "struct Slices.Slice memory"
                                    }
                                  },
                                  "id": 15969,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "26444:4:63",
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14153,
                                  "src": "26439:9:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "26429:19:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 15971,
                              "nodeType": "ExpressionStatement",
                              "src": "26429:19:63"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 15930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 15927,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15924,
                      "src": "26192:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 15928,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15870,
                        "src": "26196:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct Slices.Slice memory[] memory"
                        }
                      },
                      "id": 15929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "26202:6:63",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "26196:12:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26192:16:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15975,
                  "initializationExpression": {
                    "assignments": [
                      15924
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 15924,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "26185:1:63",
                        "nodeType": "VariableDeclaration",
                        "scope": 15975,
                        "src": "26180:6:63",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 15923,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "26180:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 15926,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 15925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26189:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "26180:10:63"
                  },
                  "isSimpleCounterLoop": true,
                  "loopExpression": {
                    "expression": {
                      "id": 15932,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "26210:3:63",
                      "subExpression": {
                        "id": 15931,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15924,
                        "src": "26210:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 15933,
                    "nodeType": "ExpressionStatement",
                    "src": "26210:3:63"
                  },
                  "nodeType": "ForStatement",
                  "src": "26176:299:63"
                },
                {
                  "expression": {
                    "id": 15976,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 15913,
                    "src": "26494:3:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 15874,
                  "id": 15977,
                  "nodeType": "Return",
                  "src": "26487:10:63"
                }
              ]
            },
            "id": 15979,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "nameLocation": "25762:4:63",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 15871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15866,
                  "mutability": "mutable",
                  "name": "self",
                  "nameLocation": "25780:4:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15979,
                  "src": "25767:17:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Slice_$14156_memory_ptr",
                    "typeString": "struct Slices.Slice"
                  },
                  "typeName": {
                    "id": 15865,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 15864,
                      "name": "Slice",
                      "nameLocations": [
                        "25767:5:63"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14156,
                      "src": "25767:5:63"
                    },
                    "referencedDeclaration": 14156,
                    "src": "25767:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                      "typeString": "struct Slices.Slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 15870,
                  "mutability": "mutable",
                  "name": "parts",
                  "nameLocation": "25801:5:63",
                  "nodeType": "VariableDeclaration",
                  "scope": 15979,
                  "src": "25786:20:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Slice_$14156_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct Slices.Slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 15868,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 15867,
                        "name": "Slice",
                        "nameLocations": [
                          "25786:5:63"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 14156,
                        "src": "25786:5:63"
                      },
                      "referencedDeclaration": 14156,
                      "src": "25786:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Slice_$14156_storage_ptr",
                        "typeString": "struct Slices.Slice"
                      }
                    },
                    "id": 15869,
                    "nodeType": "ArrayTypeName",
                    "src": "25786:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Slice_$14156_storage_$dyn_storage_ptr",
                      "typeString": "struct Slices.Slice[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25766:41:63"
            },
            "returnParameters": {
              "id": 15874,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 15873,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 15979,
                  "src": "25831:13:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 15872,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "25831:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25830:15:63"
            },
            "scope": 15980,
            "src": "25753:752:63",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 15981,
        "src": "2090:24418:63",
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "src": "42:26466:63"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.527Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}