{
    "contractName": "ECDSA",
    "abi": [],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xdb7f5c28fc61cda0bd8ab60ce288e206b791643bcd3ba464a70cbec18895a2f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf52bdf22a33263f5ca6227a35faeac3b81e7d2c692fbcc6a079d488710c5900\",\"dweb:/ipfs/QmcmsjkP4yq3UhiJbvyzwufaY2EKh1zhHaRK8ATag2cpD2\"]}},\"version\":1}",
    "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207672b568d753a5637ab794d2c0eaaf501f28235d504690cb445b257d2ae61e9764736f6c63430008070033",
    "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207672b568d753a5637ab794d2c0eaaf501f28235d504690cb445b257d2ae61e9764736f6c63430008070033",
    "immutableReferences": {},
    "sourceMap": "369:8375:57:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;369:8375:57;;;;;;;;;;;;;;;;;",
    "deployedSourceMap": "369:8375:57:-:0;;;;;;;;",
    "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Strings.sol\";\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n    enum RecoverError {\n        NoError,\n        InvalidSignature,\n        InvalidSignatureLength,\n        InvalidSignatureS,\n        InvalidSignatureV\n    }\n\n    function _throwError(RecoverError error) private pure {\n        if (error == RecoverError.NoError) {\n            return; // no error: do nothing\n        } else if (error == RecoverError.InvalidSignature) {\n            revert(\"ECDSA: invalid signature\");\n        } else if (error == RecoverError.InvalidSignatureLength) {\n            revert(\"ECDSA: invalid signature length\");\n        } else if (error == RecoverError.InvalidSignatureS) {\n            revert(\"ECDSA: invalid signature 's' value\");\n        } else if (error == RecoverError.InvalidSignatureV) {\n            revert(\"ECDSA: invalid signature 'v' value\");\n        }\n    }\n\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature` or error string. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     *\n     * Documentation for signature generation:\n     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\n        if (signature.length == 65) {\n            bytes32 r;\n            bytes32 s;\n            uint8 v;\n            // ecrecover takes the signature parameters, and the only way to get them\n            // currently is to use assembly.\n            /// @solidity memory-safe-assembly\n            assembly {\n                r := mload(add(signature, 0x20))\n                s := mload(add(signature, 0x40))\n                v := byte(0, mload(add(signature, 0x60)))\n            }\n            return tryRecover(hash, v, r, s);\n        } else {\n            return (address(0), RecoverError.InvalidSignatureLength);\n        }\n    }\n\n    /**\n     * @dev Returns the address that signed a hashed message (`hash`) with\n     * `signature`. This address can then be used for verification purposes.\n     *\n     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n     * this function rejects them by requiring the `s` value to be in the lower\n     * half order, and the `v` value to be either 27 or 28.\n     *\n     * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n     * verification to be secure: it is possible to craft signatures that\n     * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n     * this is by receiving a hash of the original message (which may otherwise\n     * be too long), and then calling {toEthSignedMessageHash} on it.\n     */\n    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, signature);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n     *\n     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(\n        bytes32 hash,\n        bytes32 r,\n        bytes32 vs\n    ) internal pure returns (address, RecoverError) {\n        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n        uint8 v = uint8((uint256(vs) >> 255) + 27);\n        return tryRecover(hash, v, r, s);\n    }\n\n    /**\n     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n     *\n     * _Available since v4.2._\n     */\n    function recover(\n        bytes32 hash,\n        bytes32 r,\n        bytes32 vs\n    ) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, r, vs);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n     * `r` and `s` signature fields separately.\n     *\n     * _Available since v4.3._\n     */\n    function tryRecover(\n        bytes32 hash,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal pure returns (address, RecoverError) {\n        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n        // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n        //\n        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n        // these malleable signatures as well.\n        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n            return (address(0), RecoverError.InvalidSignatureS);\n        }\n        if (v != 27 && v != 28) {\n            return (address(0), RecoverError.InvalidSignatureV);\n        }\n\n        // If the signature is valid (and not malleable), return the signer address\n        address signer = ecrecover(hash, v, r, s);\n        if (signer == address(0)) {\n            return (address(0), RecoverError.InvalidSignature);\n        }\n\n        return (signer, RecoverError.NoError);\n    }\n\n    /**\n     * @dev Overload of {ECDSA-recover} that receives the `v`,\n     * `r` and `s` signature fields separately.\n     */\n    function recover(\n        bytes32 hash,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal pure returns (address) {\n        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\n        _throwError(error);\n        return recovered;\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n     * produces hash corresponding to the one signed with the\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n     * JSON-RPC method as part of EIP-191.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\n        // 32 is the length in bytes of hash,\n        // enforced by the type signature above\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash));\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Message, created from `s`. This\n     * produces hash corresponding to the one signed with the\n     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n     * JSON-RPC method as part of EIP-191.\n     *\n     * See {recover}.\n     */\n    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"\\x19Ethereum Signed Message:\\n\", Strings.toString(s.length), s));\n    }\n\n    /**\n     * @dev Returns an Ethereum Signed Typed Data, created from a\n     * `domainSeparator` and a `structHash`. This produces hash corresponding\n     * to the one signed with the\n     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n     * JSON-RPC method as part of EIP-712.\n     *\n     * See {recover}.\n     */\n    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\n        return keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n    }\n}\n",
    "sourcePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
    "ast": {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "exportedSymbols": {
            "ECDSA": [
                12122
            ],
            "Strings": [
                11734
            ]
        },
        "id": 12123,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 11736,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "112:23:57"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
                "file": "../Strings.sol",
                "id": 11737,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 12123,
                "sourceUnit": 11735,
                "src": "137:24:57",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 11738,
                    "nodeType": "StructuredDocumentation",
                    "src": "163:205:57",
                    "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."
                },
                "fullyImplemented": true,
                "id": 12122,
                "linearizedBaseContracts": [
                    12122
                ],
                "name": "ECDSA",
                "nameLocation": "377:5:57",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "canonicalName": "ECDSA.RecoverError",
                        "id": 11744,
                        "members": [
                            {
                                "id": 11739,
                                "name": "NoError",
                                "nameLocation": "417:7:57",
                                "nodeType": "EnumValue",
                                "src": "417:7:57"
                            },
                            {
                                "id": 11740,
                                "name": "InvalidSignature",
                                "nameLocation": "434:16:57",
                                "nodeType": "EnumValue",
                                "src": "434:16:57"
                            },
                            {
                                "id": 11741,
                                "name": "InvalidSignatureLength",
                                "nameLocation": "460:22:57",
                                "nodeType": "EnumValue",
                                "src": "460:22:57"
                            },
                            {
                                "id": 11742,
                                "name": "InvalidSignatureS",
                                "nameLocation": "492:17:57",
                                "nodeType": "EnumValue",
                                "src": "492:17:57"
                            },
                            {
                                "id": 11743,
                                "name": "InvalidSignatureV",
                                "nameLocation": "519:17:57",
                                "nodeType": "EnumValue",
                                "src": "519:17:57"
                            }
                        ],
                        "name": "RecoverError",
                        "nameLocation": "394:12:57",
                        "nodeType": "EnumDefinition",
                        "src": "389:153:57"
                    },
                    {
                        "body": {
                            "id": 11797,
                            "nodeType": "Block",
                            "src": "602:577:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        },
                                        "id": 11753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 11750,
                                            "name": "error",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11747,
                                            "src": "616:5:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 11751,
                                                "name": "RecoverError",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11744,
                                                "src": "625:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                }
                                            },
                                            "id": 11752,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "NoError",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 11739,
                                            "src": "625:20:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            }
                                        },
                                        "src": "616:29:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "condition": {
                                            "commonType": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "id": 11759,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11756,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11747,
                                                "src": "712:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 11757,
                                                    "name": "RecoverError",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11744,
                                                    "src": "721:12:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "type(enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "id": 11758,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "InvalidSignature",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 11740,
                                                "src": "721:29:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "src": "712:38:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "falseBody": {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                },
                                                "id": 11768,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 11765,
                                                    "name": "error",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11747,
                                                    "src": "821:5:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 11766,
                                                        "name": "RecoverError",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 11744,
                                                        "src": "830:12:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                            "typeString": "type(enum ECDSA.RecoverError)"
                                                        }
                                                    },
                                                    "id": 11767,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "InvalidSignatureLength",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 11741,
                                                    "src": "830:35:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    }
                                                },
                                                "src": "821:44:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": {
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    },
                                                    "id": 11777,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 11774,
                                                        "name": "error",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 11747,
                                                        "src": "943:5:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 11775,
                                                            "name": "RecoverError",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11744,
                                                            "src": "952:12:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                "typeString": "type(enum ECDSA.RecoverError)"
                                                            }
                                                        },
                                                        "id": 11776,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "InvalidSignatureS",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 11742,
                                                        "src": "952:30:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        }
                                                    },
                                                    "src": "943:39:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseBody": {
                                                    "condition": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        },
                                                        "id": 11786,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 11783,
                                                            "name": "error",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11747,
                                                            "src": "1063:5:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "==",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 11784,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "1072:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11785,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureV",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11743,
                                                            "src": "1072:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        },
                                                        "src": "1063:39:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "id": 11792,
                                                    "nodeType": "IfStatement",
                                                    "src": "1059:114:57",
                                                    "trueBody": {
                                                        "id": 11791,
                                                        "nodeType": "Block",
                                                        "src": "1104:69:57",
                                                        "statements": [
                                                            {
                                                                "expression": {
                                                                    "arguments": [
                                                                        {
                                                                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c7565",
                                                                            "id": 11788,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "kind": "string",
                                                                            "lValueRequested": false,
                                                                            "nodeType": "Literal",
                                                                            "src": "1125:36:57",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                                                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                                                            },
                                                                            "value": "ECDSA: invalid signature 'v' value"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": [
                                                                            {
                                                                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                                                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                                                            }
                                                                        ],
                                                                        "id": 11787,
                                                                        "name": "revert",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [
                                                                            4294967277,
                                                                            4294967277
                                                                        ],
                                                                        "referencedDeclaration": 4294967277,
                                                                        "src": "1118:6:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                            "typeString": "function (string memory) pure"
                                                                        }
                                                                    },
                                                                    "id": 11789,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "1118:44:57",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_tuple$__$",
                                                                        "typeString": "tuple()"
                                                                    }
                                                                },
                                                                "id": 11790,
                                                                "nodeType": "ExpressionStatement",
                                                                "src": "1118:44:57"
                                                            }
                                                        ]
                                                    }
                                                },
                                                "id": 11793,
                                                "nodeType": "IfStatement",
                                                "src": "939:234:57",
                                                "trueBody": {
                                                    "id": 11782,
                                                    "nodeType": "Block",
                                                    "src": "984:69:57",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c7565",
                                                                        "id": 11779,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "string",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "1005:36:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                                                            "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                                                        },
                                                                        "value": "ECDSA: invalid signature 's' value"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                                                            "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                                                        }
                                                                    ],
                                                                    "id": 11778,
                                                                    "name": "revert",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [
                                                                        4294967277,
                                                                        4294967277
                                                                    ],
                                                                    "referencedDeclaration": 4294967277,
                                                                    "src": "998:6:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                        "typeString": "function (string memory) pure"
                                                                    }
                                                                },
                                                                "id": 11780,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "998:44:57",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_tuple$__$",
                                                                    "typeString": "tuple()"
                                                                }
                                                            },
                                                            "id": 11781,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "998:44:57"
                                                        }
                                                    ]
                                                }
                                            },
                                            "id": 11794,
                                            "nodeType": "IfStatement",
                                            "src": "817:356:57",
                                            "trueBody": {
                                                "id": 11773,
                                                "nodeType": "Block",
                                                "src": "867:66:57",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                                                                    "id": 11770,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "888:33:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                                                        "typeString": "literal_string \"ECDSA: invalid signature length\""
                                                                    },
                                                                    "value": "ECDSA: invalid signature length"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                                                        "typeString": "literal_string \"ECDSA: invalid signature length\""
                                                                    }
                                                                ],
                                                                "id": 11769,
                                                                "name": "revert",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [
                                                                    4294967277,
                                                                    4294967277
                                                                ],
                                                                "referencedDeclaration": 4294967277,
                                                                "src": "881:6:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                    "typeString": "function (string memory) pure"
                                                                }
                                                            },
                                                            "id": 11771,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "881:41:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 11772,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "881:41:57"
                                                    }
                                                ]
                                            }
                                        },
                                        "id": 11795,
                                        "nodeType": "IfStatement",
                                        "src": "708:465:57",
                                        "trueBody": {
                                            "id": 11764,
                                            "nodeType": "Block",
                                            "src": "752:59:57",
                                            "statements": [
                                                {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                                                                "id": 11761,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "string",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "773:26:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                                                    "typeString": "literal_string \"ECDSA: invalid signature\""
                                                                },
                                                                "value": "ECDSA: invalid signature"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                                                    "typeString": "literal_string \"ECDSA: invalid signature\""
                                                                }
                                                            ],
                                                            "id": 11760,
                                                            "name": "revert",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [
                                                                4294967277,
                                                                4294967277
                                                            ],
                                                            "referencedDeclaration": 4294967277,
                                                            "src": "766:6:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                "typeString": "function (string memory) pure"
                                                            }
                                                        },
                                                        "id": 11762,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "766:34:57",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_tuple$__$",
                                                            "typeString": "tuple()"
                                                        }
                                                    },
                                                    "id": 11763,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "766:34:57"
                                                }
                                            ]
                                        }
                                    },
                                    "id": 11796,
                                    "nodeType": "IfStatement",
                                    "src": "612:561:57",
                                    "trueBody": {
                                        "id": 11755,
                                        "nodeType": "Block",
                                        "src": "647:55:57",
                                        "statements": [
                                            {
                                                "functionReturnParameters": 11749,
                                                "id": 11754,
                                                "nodeType": "Return",
                                                "src": "661:7:57"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 11798,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_throwError",
                        "nameLocation": "557:11:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11748,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11747,
                                    "mutability": "mutable",
                                    "name": "error",
                                    "nameLocation": "582:5:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11798,
                                    "src": "569:18:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11746,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11745,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "569:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "569:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "568:20:57"
                        },
                        "returnParameters": {
                            "id": 11749,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "602:0:57"
                        },
                        "scope": 12122,
                        "src": "548:631:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 11843,
                            "nodeType": "Block",
                            "src": "2347:626:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 11814,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 11811,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11803,
                                                "src": "2361:9:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 11812,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "2361:16:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "hexValue": "3635",
                                            "id": 11813,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2381:2:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_65_by_1",
                                                "typeString": "int_const 65"
                                            },
                                            "value": "65"
                                        },
                                        "src": "2361:22:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 11841,
                                        "nodeType": "Block",
                                        "src": "2886:81:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11835,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2916:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11834,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2908:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11833,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2908:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11836,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2908:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11837,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "2920:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11838,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureLength",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11741,
                                                            "src": "2920:35:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11839,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "2907:49:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11810,
                                                "id": 11840,
                                                "nodeType": "Return",
                                                "src": "2900:56:57"
                                            }
                                        ]
                                    },
                                    "id": 11842,
                                    "nodeType": "IfStatement",
                                    "src": "2357:610:57",
                                    "trueBody": {
                                        "id": 11832,
                                        "nodeType": "Block",
                                        "src": "2385:495:57",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    11816
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11816,
                                                        "mutability": "mutable",
                                                        "name": "r",
                                                        "nameLocation": "2407:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2399:9:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        "typeName": {
                                                            "id": 11815,
                                                            "name": "bytes32",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2399:7:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11817,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2399:9:57"
                                            },
                                            {
                                                "assignments": [
                                                    11819
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11819,
                                                        "mutability": "mutable",
                                                        "name": "s",
                                                        "nameLocation": "2430:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2422:9:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        "typeName": {
                                                            "id": 11818,
                                                            "name": "bytes32",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2422:7:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11820,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2422:9:57"
                                            },
                                            {
                                                "assignments": [
                                                    11822
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11822,
                                                        "mutability": "mutable",
                                                        "name": "v",
                                                        "nameLocation": "2451:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2445:7:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint8",
                                                            "typeString": "uint8"
                                                        },
                                                        "typeName": {
                                                            "id": 11821,
                                                            "name": "uint8",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2445:5:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11823,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2445:7:57"
                                            },
                                            {
                                                "AST": {
                                                    "nodeType": "YulBlock",
                                                    "src": "2653:171:57",
                                                    "statements": [
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2671:32:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "signature",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "2686:9:57"
                                                                            },
                                                                            {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "2697:4:57",
                                                                                "type": "",
                                                                                "value": "0x20"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "add",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2682:3:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2682:20:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mload",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2676:5:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2676:27:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "r",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2671:1:57"
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2720:32:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "signature",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "2735:9:57"
                                                                            },
                                                                            {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "2746:4:57",
                                                                                "type": "",
                                                                                "value": "0x40"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "add",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2731:3:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2731:20:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mload",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2725:5:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2725:27:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "s",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2720:1:57"
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2769:41:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "2779:1:57",
                                                                        "type": "",
                                                                        "value": "0"
                                                                    },
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "arguments": [
                                                                                    {
                                                                                        "name": "signature",
                                                                                        "nodeType": "YulIdentifier",
                                                                                        "src": "2792:9:57"
                                                                                    },
                                                                                    {
                                                                                        "kind": "number",
                                                                                        "nodeType": "YulLiteral",
                                                                                        "src": "2803:4:57",
                                                                                        "type": "",
                                                                                        "value": "0x60"
                                                                                    }
                                                                                ],
                                                                                "functionName": {
                                                                                    "name": "add",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "2788:3:57"
                                                                                },
                                                                                "nodeType": "YulFunctionCall",
                                                                                "src": "2788:20:57"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "mload",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2782:5:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2782:27:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "byte",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2774:4:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2774:36:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "v",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2769:1:57"
                                                                }
                                                            ]
                                                        }
                                                    ]
                                                },
                                                "documentation": "@solidity memory-safe-assembly",
                                                "evmVersion": "london",
                                                "externalReferences": [
                                                    {
                                                        "declaration": 11816,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2671:1:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11819,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2720:1:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2686:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2735:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2792:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11822,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2769:1:57",
                                                        "valueSize": 1
                                                    }
                                                ],
                                                "id": 11824,
                                                "nodeType": "InlineAssembly",
                                                "src": "2644:180:57"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 11826,
                                                            "name": "hash",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11801,
                                                            "src": "2855:4:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        {
                                                            "id": 11827,
                                                            "name": "v",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11822,
                                                            "src": "2861:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            }
                                                        },
                                                        {
                                                            "id": 11828,
                                                            "name": "r",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11816,
                                                            "src": "2864:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        {
                                                            "id": 11829,
                                                            "name": "s",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11819,
                                                            "src": "2867:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        ],
                                                        "id": 11825,
                                                        "name": "tryRecover",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            11844,
                                                            11918,
                                                            12029
                                                        ],
                                                        "referencedDeclaration": 12029,
                                                        "src": "2844:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                            "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                                        }
                                                    },
                                                    "id": 11830,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2844:25:57",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11810,
                                                "id": 11831,
                                                "nodeType": "Return",
                                                "src": "2837:32:57"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11799,
                            "nodeType": "StructuredDocumentation",
                            "src": "1185:1053:57",
                            "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature` or error string. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n _Available since v4.3._"
                        },
                        "id": 11844,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "2252:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11804,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11801,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "2271:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2263:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11800,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2263:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11803,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2290:9:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2277:22:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 11802,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2277:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2262:38:57"
                        },
                        "returnParameters": {
                            "id": 11810,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11806,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2324:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11805,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2324:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11809,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2333:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11808,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11807,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "2333:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "2333:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2323:23:57"
                        },
                        "scope": 12122,
                        "src": "2243:730:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11870,
                            "nodeType": "Block",
                            "src": "3846:140:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11855,
                                        11858
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11855,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "3865:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11870,
                                            "src": "3857:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11854,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3857:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 11858,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "3889:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11870,
                                            "src": "3876:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 11857,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 11856,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "3876:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "3876:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11863,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 11860,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11847,
                                                "src": "3909:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11861,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11849,
                                                "src": "3915:9:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 11859,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 11844,
                                            "src": "3898:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11862,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3898:27:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3856:69:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11865,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11858,
                                                "src": "3947:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 11864,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "3935:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 11866,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3935:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 11867,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3935:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 11868,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11855,
                                        "src": "3970:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 11853,
                                    "id": 11869,
                                    "nodeType": "Return",
                                    "src": "3963:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11845,
                            "nodeType": "StructuredDocumentation",
                            "src": "2979:775:57",
                            "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it."
                        },
                        "id": 11871,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "3768:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11850,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11847,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "3784:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3776:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11846,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3776:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11849,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "3803:9:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3790:22:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 11848,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3790:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3775:38:57"
                        },
                        "returnParameters": {
                            "id": 11853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11852,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3837:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11851,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3837:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3836:9:57"
                        },
                        "scope": 12122,
                        "src": "3759:227:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11917,
                            "nodeType": "Block",
                            "src": "4373:203:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11887
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11887,
                                            "mutability": "mutable",
                                            "name": "s",
                                            "nameLocation": "4391:1:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11917,
                                            "src": "4383:9:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 11886,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4383:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11894,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        },
                                        "id": 11893,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 11888,
                                            "name": "vs",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11878,
                                            "src": "4395:2:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "hexValue": "307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666",
                                                    "id": 11891,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4408:66:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
                                                        "typeString": "int_const 5789...(69 digits omitted)...9967"
                                                    },
                                                    "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
                                                        "typeString": "int_const 5789...(69 digits omitted)...9967"
                                                    }
                                                ],
                                                "id": 11890,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4400:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                                    "typeString": "type(bytes32)"
                                                },
                                                "typeName": {
                                                    "id": 11889,
                                                    "name": "bytes32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "4400:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 11892,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4400:75:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "src": "4395:80:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4383:92:57"
                                },
                                {
                                    "assignments": [
                                        11896
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11896,
                                            "mutability": "mutable",
                                            "name": "v",
                                            "nameLocation": "4491:1:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11917,
                                            "src": "4485:7:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "typeName": {
                                                "id": 11895,
                                                "name": "uint8",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4485:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11909,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 11907,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 11904,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 11901,
                                                                        "name": "vs",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 11878,
                                                                        "src": "4510:2:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    ],
                                                                    "id": 11900,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "4502:7:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                                        "typeString": "type(uint256)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 11899,
                                                                        "name": "uint256",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "4502:7:57",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 11902,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4502:11:57",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": ">>",
                                                            "rightExpression": {
                                                                "hexValue": "323535",
                                                                "id": 11903,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4517:3:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_255_by_1",
                                                                    "typeString": "int_const 255"
                                                                },
                                                                "value": "255"
                                                            },
                                                            "src": "4502:18:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11905,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "4501:20:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "hexValue": "3237",
                                                    "id": 11906,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4524:2:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_27_by_1",
                                                        "typeString": "int_const 27"
                                                    },
                                                    "value": "27"
                                                },
                                                "src": "4501:25:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 11898,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4495:5:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint8_$",
                                                "typeString": "type(uint8)"
                                            },
                                            "typeName": {
                                                "id": 11897,
                                                "name": "uint8",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4495:5:57",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 11908,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4495:32:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4485:42:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11911,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11874,
                                                "src": "4555:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11912,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11896,
                                                "src": "4561:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 11913,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11876,
                                                "src": "4564:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11914,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11887,
                                                "src": "4567:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 11910,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 12029,
                                            "src": "4544:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11915,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4544:25:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "functionReturnParameters": 11885,
                                    "id": 11916,
                                    "nodeType": "Return",
                                    "src": "4537:32:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11872,
                            "nodeType": "StructuredDocumentation",
                            "src": "3992:243:57",
                            "text": " @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n _Available since v4.3._"
                        },
                        "id": 11918,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "4249:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11879,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11874,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "4277:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4269:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11873,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4269:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11876,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "4299:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4291:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11875,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4291:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11878,
                                    "mutability": "mutable",
                                    "name": "vs",
                                    "nameLocation": "4318:2:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4310:10:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11877,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4310:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4259:67:57"
                        },
                        "returnParameters": {
                            "id": 11885,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11881,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4350:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11880,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4350:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11884,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4359:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11883,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11882,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "4359:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "4359:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4349:23:57"
                        },
                        "scope": 12122,
                        "src": "4240:336:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11947,
                            "nodeType": "Block",
                            "src": "4857:136:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11931,
                                        11934
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11931,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "4876:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11947,
                                            "src": "4868:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11930,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4868:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 11934,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "4900:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11947,
                                            "src": "4887:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 11933,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 11932,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "4887:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "4887:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11940,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 11936,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11921,
                                                "src": "4920:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11937,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11923,
                                                "src": "4926:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11938,
                                                "name": "vs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11925,
                                                "src": "4929:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 11935,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 11918,
                                            "src": "4909:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4909:23:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4867:65:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11942,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11934,
                                                "src": "4954:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 11941,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "4942:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 11943,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4942:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 11944,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4942:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 11945,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11931,
                                        "src": "4977:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 11929,
                                    "id": 11946,
                                    "nodeType": "Return",
                                    "src": "4970:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11919,
                            "nodeType": "StructuredDocumentation",
                            "src": "4582:154:57",
                            "text": " @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n _Available since v4.2._"
                        },
                        "id": 11948,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "4750:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11926,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11921,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "4775:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4767:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11920,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4767:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11923,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "4797:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4789:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11922,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4789:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11925,
                                    "mutability": "mutable",
                                    "name": "vs",
                                    "nameLocation": "4816:2:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4808:10:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11924,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4808:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4757:67:57"
                        },
                        "returnParameters": {
                            "id": 11929,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11928,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4848:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11927,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4848:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4847:9:57"
                        },
                        "scope": 12122,
                        "src": "4741:252:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12028,
                            "nodeType": "Block",
                            "src": "5316:1454:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 11970,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 11967,
                                                    "name": "s",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11957,
                                                    "src": "6212:1:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                ],
                                                "id": 11966,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "6204:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 11965,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6204:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 11968,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6204:10:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                                            "id": 11969,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6217:66:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                                                "typeString": "int_const 5789...(69 digits omitted)...7168"
                                            },
                                            "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                                        },
                                        "src": "6204:79:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 11980,
                                    "nodeType": "IfStatement",
                                    "src": "6200:161:57",
                                    "trueBody": {
                                        "id": 11979,
                                        "nodeType": "Block",
                                        "src": "6285:76:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11973,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6315:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11972,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6307:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11971,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6307:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11974,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6307:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11975,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6319:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11976,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureS",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11742,
                                                            "src": "6319:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11977,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6306:44:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 11978,
                                                "nodeType": "Return",
                                                "src": "6299:51:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 11987,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "id": 11983,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11981,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6374:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "3237",
                                                "id": 11982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6379:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_27_by_1",
                                                    "typeString": "int_const 27"
                                                },
                                                "value": "27"
                                            },
                                            "src": "6374:7:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "id": 11986,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11984,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6385:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "3238",
                                                "id": 11985,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6390:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_28_by_1",
                                                    "typeString": "int_const 28"
                                                },
                                                "value": "28"
                                            },
                                            "src": "6385:7:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "6374:18:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 11997,
                                    "nodeType": "IfStatement",
                                    "src": "6370:100:57",
                                    "trueBody": {
                                        "id": 11996,
                                        "nodeType": "Block",
                                        "src": "6394:76:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11990,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6424:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11989,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6416:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11988,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6416:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11991,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6416:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11992,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6428:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11993,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureV",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11743,
                                                            "src": "6428:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11994,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6415:44:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 11995,
                                                "nodeType": "Return",
                                                "src": "6408:51:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        11999
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11999,
                                            "mutability": "mutable",
                                            "name": "signer",
                                            "nameLocation": "6572:6:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12028,
                                            "src": "6564:14:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11998,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6564:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12006,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 12001,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11951,
                                                "src": "6591:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12002,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6597:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 12003,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11955,
                                                "src": "6600:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12004,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11957,
                                                "src": "6603:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 12000,
                                            "name": "ecrecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967290,
                                            "src": "6581:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                            }
                                        },
                                        "id": 12005,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6581:24:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6564:41:57"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 12012,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 12007,
                                            "name": "signer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11999,
                                            "src": "6619:6:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "hexValue": "30",
                                                    "id": 12010,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "6637:1:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    }
                                                ],
                                                "id": 12009,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "6629:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                    "id": 12008,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6629:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 12011,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6629:10:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "6619:20:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12022,
                                    "nodeType": "IfStatement",
                                    "src": "6615:101:57",
                                    "trueBody": {
                                        "id": 12021,
                                        "nodeType": "Block",
                                        "src": "6641:75:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 12015,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6671:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 12014,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6663:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 12013,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6663:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 12016,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6663:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 12017,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6675:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 12018,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignature",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11740,
                                                            "src": "6675:29:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 12019,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6662:43:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 12020,
                                                "nodeType": "Return",
                                                "src": "6655:50:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 12023,
                                                "name": "signer",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11999,
                                                "src": "6734:6:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 12024,
                                                    "name": "RecoverError",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11744,
                                                    "src": "6742:12:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "type(enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "id": 12025,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "NoError",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 11739,
                                                "src": "6742:20:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "id": 12026,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6733:30:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "functionReturnParameters": 11964,
                                    "id": 12027,
                                    "nodeType": "Return",
                                    "src": "6726:37:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11949,
                            "nodeType": "StructuredDocumentation",
                            "src": "4999:163:57",
                            "text": " @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately.\n _Available since v4.3._"
                        },
                        "id": 12029,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "5176:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11958,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11951,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "5204:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5196:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11950,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5196:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11953,
                                    "mutability": "mutable",
                                    "name": "v",
                                    "nameLocation": "5224:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5218:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 11952,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5218:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11955,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "5243:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5235:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11954,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5235:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11957,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "5262:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5254:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11956,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5254:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5186:83:57"
                        },
                        "returnParameters": {
                            "id": 11964,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11960,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5293:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11959,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5293:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11963,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5302:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11962,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11961,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "5302:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "5302:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5292:23:57"
                        },
                        "scope": 12122,
                        "src": "5167:1603:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12061,
                            "nodeType": "Block",
                            "src": "7035:138:57",
                            "statements": [
                                {
                                    "assignments": [
                                        12044,
                                        12047
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12044,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "7054:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12061,
                                            "src": "7046:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 12043,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7046:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 12047,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "7078:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12061,
                                            "src": "7065:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 12046,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 12045,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "7065:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "7065:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12054,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 12049,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12032,
                                                "src": "7098:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12050,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12034,
                                                "src": "7104:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 12051,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12036,
                                                "src": "7107:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12052,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12038,
                                                "src": "7110:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 12048,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 12029,
                                            "src": "7087:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 12053,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7087:25:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7045:67:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 12056,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12047,
                                                "src": "7134:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 12055,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "7122:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 12057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7122:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 12058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7122:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 12059,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12044,
                                        "src": "7157:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 12042,
                                    "id": 12060,
                                    "nodeType": "Return",
                                    "src": "7150:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12030,
                            "nodeType": "StructuredDocumentation",
                            "src": "6776:122:57",
                            "text": " @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."
                        },
                        "id": 12062,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "6912:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12039,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12032,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "6937:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6929:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12031,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6929:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12034,
                                    "mutability": "mutable",
                                    "name": "v",
                                    "nameLocation": "6957:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6951:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 12033,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6951:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12036,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "6976:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6968:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12035,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6968:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12038,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "6995:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6987:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12037,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6987:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6919:83:57"
                        },
                        "returnParameters": {
                            "id": 12042,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12041,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "7026:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12040,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7026:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7025:9:57"
                        },
                        "scope": 12122,
                        "src": "6903:270:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12078,
                            "nodeType": "Block",
                            "src": "7541:187:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                                                        "id": 12073,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7679:34:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                                        },
                                                        "value": "\u0019Ethereum Signed Message:\n32"
                                                    },
                                                    {
                                                        "id": 12074,
                                                        "name": "hash",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12065,
                                                        "src": "7715:4:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12071,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "7662:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12072,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "7662:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12075,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7662:58:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12070,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "7652:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12076,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7652:69:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12069,
                                    "id": 12077,
                                    "nodeType": "Return",
                                    "src": "7645:76:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12063,
                            "nodeType": "StructuredDocumentation",
                            "src": "7179:279:57",
                            "text": " @dev Returns an Ethereum Signed Message, created from a `hash`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."
                        },
                        "id": 12079,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toEthSignedMessageHash",
                        "nameLocation": "7472:22:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12066,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12065,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "7503:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12079,
                                    "src": "7495:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12064,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7495:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7494:14:57"
                        },
                        "returnParameters": {
                            "id": 12069,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12068,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12079,
                                    "src": "7532:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12067,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7532:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7531:9:57"
                        },
                        "scope": 12122,
                        "src": "7463:265:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12100,
                            "nodeType": "Block",
                            "src": "8093:116:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a",
                                                        "id": 12090,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8137:32:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""
                                                        },
                                                        "value": "\u0019Ethereum Signed Message:\n"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 12093,
                                                                    "name": "s",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12082,
                                                                    "src": "8188:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                },
                                                                "id": 12094,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "length",
                                                                "nodeType": "MemberAccess",
                                                                "src": "8188:8:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "id": 12091,
                                                                "name": "Strings",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11734,
                                                                "src": "8171:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_Strings_$11734_$",
                                                                    "typeString": "type(library Strings)"
                                                                }
                                                            },
                                                            "id": 12092,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "toString",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11596,
                                                            "src": "8171:16:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                                                "typeString": "function (uint256) pure returns (string memory)"
                                                            }
                                                        },
                                                        "id": 12095,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8171:26:57",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "id": 12096,
                                                        "name": "s",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12082,
                                                        "src": "8199:1:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12088,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "8120:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12089,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8120:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12097,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8120:81:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12087,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "8110:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12098,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8110:92:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12086,
                                    "id": 12099,
                                    "nodeType": "Return",
                                    "src": "8103:99:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12080,
                            "nodeType": "StructuredDocumentation",
                            "src": "7734:274:57",
                            "text": " @dev Returns an Ethereum Signed Message, created from `s`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."
                        },
                        "id": 12101,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toEthSignedMessageHash",
                        "nameLocation": "8022:22:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12083,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12082,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "8058:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12101,
                                    "src": "8045:14:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 12081,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8045:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8044:16:57"
                        },
                        "returnParameters": {
                            "id": 12086,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12085,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12101,
                                    "src": "8084:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12084,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8084:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8083:9:57"
                        },
                        "scope": 12122,
                        "src": "8013:196:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12120,
                            "nodeType": "Block",
                            "src": "8650:92:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "1901",
                                                        "id": 12114,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8694:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "id": 12115,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12104,
                                                        "src": "8706:15:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "id": 12116,
                                                        "name": "structHash",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12106,
                                                        "src": "8723:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12112,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "8677:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12113,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8677:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12117,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8677:57:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12111,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "8667:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12118,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8667:68:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12110,
                                    "id": 12119,
                                    "nodeType": "Return",
                                    "src": "8660:75:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12102,
                            "nodeType": "StructuredDocumentation",
                            "src": "8215:328:57",
                            "text": " @dev Returns an Ethereum Signed Typed Data, created from a\n `domainSeparator` and a `structHash`. This produces hash corresponding\n to the one signed with the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n JSON-RPC method as part of EIP-712.\n See {recover}."
                        },
                        "id": 12121,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toTypedDataHash",
                        "nameLocation": "8557:15:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12107,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12104,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "8581:15:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8573:23:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12103,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8573:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12106,
                                    "mutability": "mutable",
                                    "name": "structHash",
                                    "nameLocation": "8606:10:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8598:18:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12105,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8598:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8572:45:57"
                        },
                        "returnParameters": {
                            "id": 12110,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12109,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8641:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12108,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8641:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8640:9:57"
                        },
                        "scope": 12122,
                        "src": "8548:194:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 12123,
                "src": "369:8375:57",
                "usedErrors": []
            }
        ],
        "src": "112:8633:57"
    },
    "legacyAST": {
        "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
        "exportedSymbols": {
            "ECDSA": [
                12122
            ],
            "Strings": [
                11734
            ]
        },
        "id": 12123,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 11736,
                "literals": [
                    "solidity",
                    "^",
                    "0.8",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "112:23:57"
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
                "file": "../Strings.sol",
                "id": 11737,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 12123,
                "sourceUnit": 11735,
                "src": "137:24:57",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [],
                "contractDependencies": [],
                "contractKind": "library",
                "documentation": {
                    "id": 11738,
                    "nodeType": "StructuredDocumentation",
                    "src": "163:205:57",
                    "text": " @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."
                },
                "fullyImplemented": true,
                "id": 12122,
                "linearizedBaseContracts": [
                    12122
                ],
                "name": "ECDSA",
                "nameLocation": "377:5:57",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "canonicalName": "ECDSA.RecoverError",
                        "id": 11744,
                        "members": [
                            {
                                "id": 11739,
                                "name": "NoError",
                                "nameLocation": "417:7:57",
                                "nodeType": "EnumValue",
                                "src": "417:7:57"
                            },
                            {
                                "id": 11740,
                                "name": "InvalidSignature",
                                "nameLocation": "434:16:57",
                                "nodeType": "EnumValue",
                                "src": "434:16:57"
                            },
                            {
                                "id": 11741,
                                "name": "InvalidSignatureLength",
                                "nameLocation": "460:22:57",
                                "nodeType": "EnumValue",
                                "src": "460:22:57"
                            },
                            {
                                "id": 11742,
                                "name": "InvalidSignatureS",
                                "nameLocation": "492:17:57",
                                "nodeType": "EnumValue",
                                "src": "492:17:57"
                            },
                            {
                                "id": 11743,
                                "name": "InvalidSignatureV",
                                "nameLocation": "519:17:57",
                                "nodeType": "EnumValue",
                                "src": "519:17:57"
                            }
                        ],
                        "name": "RecoverError",
                        "nameLocation": "394:12:57",
                        "nodeType": "EnumDefinition",
                        "src": "389:153:57"
                    },
                    {
                        "body": {
                            "id": 11797,
                            "nodeType": "Block",
                            "src": "602:577:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        },
                                        "id": 11753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 11750,
                                            "name": "error",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11747,
                                            "src": "616:5:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "expression": {
                                                "id": 11751,
                                                "name": "RecoverError",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11744,
                                                "src": "625:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                }
                                            },
                                            "id": 11752,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "NoError",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 11739,
                                            "src": "625:20:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            }
                                        },
                                        "src": "616:29:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "condition": {
                                            "commonType": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "id": 11759,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11756,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11747,
                                                "src": "712:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                                "expression": {
                                                    "id": 11757,
                                                    "name": "RecoverError",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11744,
                                                    "src": "721:12:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "type(enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "id": 11758,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "InvalidSignature",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 11740,
                                                "src": "721:29:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "src": "712:38:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "falseBody": {
                                            "condition": {
                                                "commonType": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                },
                                                "id": 11768,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 11765,
                                                    "name": "error",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11747,
                                                    "src": "821:5:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                    "expression": {
                                                        "id": 11766,
                                                        "name": "RecoverError",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 11744,
                                                        "src": "830:12:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                            "typeString": "type(enum ECDSA.RecoverError)"
                                                        }
                                                    },
                                                    "id": 11767,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "InvalidSignatureLength",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 11741,
                                                    "src": "830:35:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    }
                                                },
                                                "src": "821:44:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            "falseBody": {
                                                "condition": {
                                                    "commonType": {
                                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                        "typeString": "enum ECDSA.RecoverError"
                                                    },
                                                    "id": 11777,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                        "id": 11774,
                                                        "name": "error",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 11747,
                                                        "src": "943:5:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "==",
                                                    "rightExpression": {
                                                        "expression": {
                                                            "id": 11775,
                                                            "name": "RecoverError",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11744,
                                                            "src": "952:12:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                "typeString": "type(enum ECDSA.RecoverError)"
                                                            }
                                                        },
                                                        "id": 11776,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "memberName": "InvalidSignatureS",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 11742,
                                                        "src": "952:30:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        }
                                                    },
                                                    "src": "943:39:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bool",
                                                        "typeString": "bool"
                                                    }
                                                },
                                                "falseBody": {
                                                    "condition": {
                                                        "commonType": {
                                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                            "typeString": "enum ECDSA.RecoverError"
                                                        },
                                                        "id": 11786,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                            "id": 11783,
                                                            "name": "error",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11747,
                                                            "src": "1063:5:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "==",
                                                        "rightExpression": {
                                                            "expression": {
                                                                "id": 11784,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "1072:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11785,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureV",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11743,
                                                            "src": "1072:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        },
                                                        "src": "1063:39:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bool",
                                                            "typeString": "bool"
                                                        }
                                                    },
                                                    "id": 11792,
                                                    "nodeType": "IfStatement",
                                                    "src": "1059:114:57",
                                                    "trueBody": {
                                                        "id": 11791,
                                                        "nodeType": "Block",
                                                        "src": "1104:69:57",
                                                        "statements": [
                                                            {
                                                                "expression": {
                                                                    "arguments": [
                                                                        {
                                                                            "hexValue": "45434453413a20696e76616c6964207369676e6174757265202776272076616c7565",
                                                                            "id": 11788,
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "kind": "string",
                                                                            "lValueRequested": false,
                                                                            "nodeType": "Literal",
                                                                            "src": "1125:36:57",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                                                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                                                            },
                                                                            "value": "ECDSA: invalid signature 'v' value"
                                                                        }
                                                                    ],
                                                                    "expression": {
                                                                        "argumentTypes": [
                                                                            {
                                                                                "typeIdentifier": "t_stringliteral_8522ee1b53216f595394db8e80a64d9e7d9bd512c0811c18debe9f40858597e4",
                                                                                "typeString": "literal_string \"ECDSA: invalid signature 'v' value\""
                                                                            }
                                                                        ],
                                                                        "id": 11787,
                                                                        "name": "revert",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [
                                                                            4294967277,
                                                                            4294967277
                                                                        ],
                                                                        "referencedDeclaration": 4294967277,
                                                                        "src": "1118:6:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                            "typeString": "function (string memory) pure"
                                                                        }
                                                                    },
                                                                    "id": 11789,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "kind": "functionCall",
                                                                    "lValueRequested": false,
                                                                    "names": [],
                                                                    "nodeType": "FunctionCall",
                                                                    "src": "1118:44:57",
                                                                    "tryCall": false,
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_tuple$__$",
                                                                        "typeString": "tuple()"
                                                                    }
                                                                },
                                                                "id": 11790,
                                                                "nodeType": "ExpressionStatement",
                                                                "src": "1118:44:57"
                                                            }
                                                        ]
                                                    }
                                                },
                                                "id": 11793,
                                                "nodeType": "IfStatement",
                                                "src": "939:234:57",
                                                "trueBody": {
                                                    "id": 11782,
                                                    "nodeType": "Block",
                                                    "src": "984:69:57",
                                                    "statements": [
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "hexValue": "45434453413a20696e76616c6964207369676e6174757265202773272076616c7565",
                                                                        "id": 11779,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": true,
                                                                        "kind": "string",
                                                                        "lValueRequested": false,
                                                                        "nodeType": "Literal",
                                                                        "src": "1005:36:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                                                            "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                                                        },
                                                                        "value": "ECDSA: invalid signature 's' value"
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_520d1f787dbcafbbfc007fd2c4ecf3d2711ec587f3ee9a1215c0b646c3e530bd",
                                                                            "typeString": "literal_string \"ECDSA: invalid signature 's' value\""
                                                                        }
                                                                    ],
                                                                    "id": 11778,
                                                                    "name": "revert",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [
                                                                        4294967277,
                                                                        4294967277
                                                                    ],
                                                                    "referencedDeclaration": 4294967277,
                                                                    "src": "998:6:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                        "typeString": "function (string memory) pure"
                                                                    }
                                                                },
                                                                "id": 11780,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "998:44:57",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_tuple$__$",
                                                                    "typeString": "tuple()"
                                                                }
                                                            },
                                                            "id": 11781,
                                                            "nodeType": "ExpressionStatement",
                                                            "src": "998:44:57"
                                                        }
                                                    ]
                                                }
                                            },
                                            "id": 11794,
                                            "nodeType": "IfStatement",
                                            "src": "817:356:57",
                                            "trueBody": {
                                                "id": 11773,
                                                "nodeType": "Block",
                                                "src": "867:66:57",
                                                "statements": [
                                                    {
                                                        "expression": {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "45434453413a20696e76616c6964207369676e6174757265206c656e677468",
                                                                    "id": 11770,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "string",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "888:33:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                                                        "typeString": "literal_string \"ECDSA: invalid signature length\""
                                                                    },
                                                                    "value": "ECDSA: invalid signature length"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_stringliteral_1669ff3ba3cdf64474e1193492d05b8434e29b0b495e60095eb5f5c8ec14ce77",
                                                                        "typeString": "literal_string \"ECDSA: invalid signature length\""
                                                                    }
                                                                ],
                                                                "id": 11769,
                                                                "name": "revert",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [
                                                                    4294967277,
                                                                    4294967277
                                                                ],
                                                                "referencedDeclaration": 4294967277,
                                                                "src": "881:6:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                    "typeString": "function (string memory) pure"
                                                                }
                                                            },
                                                            "id": 11771,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "881:41:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_tuple$__$",
                                                                "typeString": "tuple()"
                                                            }
                                                        },
                                                        "id": 11772,
                                                        "nodeType": "ExpressionStatement",
                                                        "src": "881:41:57"
                                                    }
                                                ]
                                            }
                                        },
                                        "id": 11795,
                                        "nodeType": "IfStatement",
                                        "src": "708:465:57",
                                        "trueBody": {
                                            "id": 11764,
                                            "nodeType": "Block",
                                            "src": "752:59:57",
                                            "statements": [
                                                {
                                                    "expression": {
                                                        "arguments": [
                                                            {
                                                                "hexValue": "45434453413a20696e76616c6964207369676e6174757265",
                                                                "id": 11761,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "string",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "773:26:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                                                    "typeString": "literal_string \"ECDSA: invalid signature\""
                                                                },
                                                                "value": "ECDSA: invalid signature"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_00043f6bf76368aa97c21698e9b9d4779e31902453daccf3525ddfb36e53e2be",
                                                                    "typeString": "literal_string \"ECDSA: invalid signature\""
                                                                }
                                                            ],
                                                            "id": 11760,
                                                            "name": "revert",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [
                                                                4294967277,
                                                                4294967277
                                                            ],
                                                            "referencedDeclaration": 4294967277,
                                                            "src": "766:6:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                                                "typeString": "function (string memory) pure"
                                                            }
                                                        },
                                                        "id": 11762,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "766:34:57",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_tuple$__$",
                                                            "typeString": "tuple()"
                                                        }
                                                    },
                                                    "id": 11763,
                                                    "nodeType": "ExpressionStatement",
                                                    "src": "766:34:57"
                                                }
                                            ]
                                        }
                                    },
                                    "id": 11796,
                                    "nodeType": "IfStatement",
                                    "src": "612:561:57",
                                    "trueBody": {
                                        "id": 11755,
                                        "nodeType": "Block",
                                        "src": "647:55:57",
                                        "statements": [
                                            {
                                                "functionReturnParameters": 11749,
                                                "id": 11754,
                                                "nodeType": "Return",
                                                "src": "661:7:57"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "id": 11798,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_throwError",
                        "nameLocation": "557:11:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11748,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11747,
                                    "mutability": "mutable",
                                    "name": "error",
                                    "nameLocation": "582:5:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11798,
                                    "src": "569:18:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11746,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11745,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "569:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "569:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "568:20:57"
                        },
                        "returnParameters": {
                            "id": 11749,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "602:0:57"
                        },
                        "scope": 12122,
                        "src": "548:631:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 11843,
                            "nodeType": "Block",
                            "src": "2347:626:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 11814,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "expression": {
                                                "id": 11811,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11803,
                                                "src": "2361:9:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            },
                                            "id": 11812,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "2361:16:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "hexValue": "3635",
                                            "id": 11813,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2381:2:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_65_by_1",
                                                "typeString": "int_const 65"
                                            },
                                            "value": "65"
                                        },
                                        "src": "2361:22:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "falseBody": {
                                        "id": 11841,
                                        "nodeType": "Block",
                                        "src": "2886:81:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11835,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "2916:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11834,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "2908:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11833,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "2908:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11836,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2908:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11837,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "2920:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11838,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureLength",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11741,
                                                            "src": "2920:35:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11839,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "2907:49:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11810,
                                                "id": 11840,
                                                "nodeType": "Return",
                                                "src": "2900:56:57"
                                            }
                                        ]
                                    },
                                    "id": 11842,
                                    "nodeType": "IfStatement",
                                    "src": "2357:610:57",
                                    "trueBody": {
                                        "id": 11832,
                                        "nodeType": "Block",
                                        "src": "2385:495:57",
                                        "statements": [
                                            {
                                                "assignments": [
                                                    11816
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11816,
                                                        "mutability": "mutable",
                                                        "name": "r",
                                                        "nameLocation": "2407:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2399:9:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        "typeName": {
                                                            "id": 11815,
                                                            "name": "bytes32",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2399:7:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11817,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2399:9:57"
                                            },
                                            {
                                                "assignments": [
                                                    11819
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11819,
                                                        "mutability": "mutable",
                                                        "name": "s",
                                                        "nameLocation": "2430:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2422:9:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        "typeName": {
                                                            "id": 11818,
                                                            "name": "bytes32",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2422:7:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11820,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2422:9:57"
                                            },
                                            {
                                                "assignments": [
                                                    11822
                                                ],
                                                "declarations": [
                                                    {
                                                        "constant": false,
                                                        "id": 11822,
                                                        "mutability": "mutable",
                                                        "name": "v",
                                                        "nameLocation": "2451:1:57",
                                                        "nodeType": "VariableDeclaration",
                                                        "scope": 11832,
                                                        "src": "2445:7:57",
                                                        "stateVariable": false,
                                                        "storageLocation": "default",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint8",
                                                            "typeString": "uint8"
                                                        },
                                                        "typeName": {
                                                            "id": 11821,
                                                            "name": "uint8",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "2445:5:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            }
                                                        },
                                                        "visibility": "internal"
                                                    }
                                                ],
                                                "id": 11823,
                                                "nodeType": "VariableDeclarationStatement",
                                                "src": "2445:7:57"
                                            },
                                            {
                                                "AST": {
                                                    "nodeType": "YulBlock",
                                                    "src": "2653:171:57",
                                                    "statements": [
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2671:32:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "signature",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "2686:9:57"
                                                                            },
                                                                            {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "2697:4:57",
                                                                                "type": "",
                                                                                "value": "0x20"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "add",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2682:3:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2682:20:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mload",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2676:5:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2676:27:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "r",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2671:1:57"
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2720:32:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "signature",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "2735:9:57"
                                                                            },
                                                                            {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "2746:4:57",
                                                                                "type": "",
                                                                                "value": "0x40"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "add",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2731:3:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2731:20:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mload",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2725:5:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2725:27:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "s",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2720:1:57"
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "2769:41:57",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "2779:1:57",
                                                                        "type": "",
                                                                        "value": "0"
                                                                    },
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "arguments": [
                                                                                    {
                                                                                        "name": "signature",
                                                                                        "nodeType": "YulIdentifier",
                                                                                        "src": "2792:9:57"
                                                                                    },
                                                                                    {
                                                                                        "kind": "number",
                                                                                        "nodeType": "YulLiteral",
                                                                                        "src": "2803:4:57",
                                                                                        "type": "",
                                                                                        "value": "0x60"
                                                                                    }
                                                                                ],
                                                                                "functionName": {
                                                                                    "name": "add",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "2788:3:57"
                                                                                },
                                                                                "nodeType": "YulFunctionCall",
                                                                                "src": "2788:20:57"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "mload",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "2782:5:57"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "2782:27:57"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "byte",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2774:4:57"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "2774:36:57"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "v",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "2769:1:57"
                                                                }
                                                            ]
                                                        }
                                                    ]
                                                },
                                                "documentation": "@solidity memory-safe-assembly",
                                                "evmVersion": "london",
                                                "externalReferences": [
                                                    {
                                                        "declaration": 11816,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2671:1:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11819,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2720:1:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2686:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2735:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11803,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2792:9:57",
                                                        "valueSize": 1
                                                    },
                                                    {
                                                        "declaration": 11822,
                                                        "isOffset": false,
                                                        "isSlot": false,
                                                        "src": "2769:1:57",
                                                        "valueSize": 1
                                                    }
                                                ],
                                                "id": 11824,
                                                "nodeType": "InlineAssembly",
                                                "src": "2644:180:57"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 11826,
                                                            "name": "hash",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11801,
                                                            "src": "2855:4:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        {
                                                            "id": 11827,
                                                            "name": "v",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11822,
                                                            "src": "2861:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            }
                                                        },
                                                        {
                                                            "id": 11828,
                                                            "name": "r",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11816,
                                                            "src": "2864:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        },
                                                        {
                                                            "id": 11829,
                                                            "name": "s",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 11819,
                                                            "src": "2867:1:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint8",
                                                                "typeString": "uint8"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes32",
                                                                "typeString": "bytes32"
                                                            }
                                                        ],
                                                        "id": 11825,
                                                        "name": "tryRecover",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            11844,
                                                            11918,
                                                            12029
                                                        ],
                                                        "referencedDeclaration": 12029,
                                                        "src": "2844:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                            "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                                        }
                                                    },
                                                    "id": 11830,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2844:25:57",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11810,
                                                "id": 11831,
                                                "nodeType": "Return",
                                                "src": "2837:32:57"
                                            }
                                        ]
                                    }
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11799,
                            "nodeType": "StructuredDocumentation",
                            "src": "1185:1053:57",
                            "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature` or error string. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n _Available since v4.3._"
                        },
                        "id": 11844,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "2252:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11804,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11801,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "2271:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2263:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11800,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2263:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11803,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "2290:9:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2277:22:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 11802,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2277:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2262:38:57"
                        },
                        "returnParameters": {
                            "id": 11810,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11806,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2324:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11805,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2324:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11809,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11844,
                                    "src": "2333:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11808,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11807,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "2333:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "2333:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2323:23:57"
                        },
                        "scope": 12122,
                        "src": "2243:730:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11870,
                            "nodeType": "Block",
                            "src": "3846:140:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11855,
                                        11858
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11855,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "3865:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11870,
                                            "src": "3857:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11854,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "3857:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 11858,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "3889:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11870,
                                            "src": "3876:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 11857,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 11856,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "3876:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "3876:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11863,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 11860,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11847,
                                                "src": "3909:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11861,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11849,
                                                "src": "3915:9:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 11859,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 11844,
                                            "src": "3898:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11862,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3898:27:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3856:69:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11865,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11858,
                                                "src": "3947:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 11864,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "3935:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 11866,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3935:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 11867,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3935:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 11868,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11855,
                                        "src": "3970:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 11853,
                                    "id": 11869,
                                    "nodeType": "Return",
                                    "src": "3963:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11845,
                            "nodeType": "StructuredDocumentation",
                            "src": "2979:775:57",
                            "text": " @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {toEthSignedMessageHash} on it."
                        },
                        "id": 11871,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "3768:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11850,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11847,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "3784:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3776:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11846,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3776:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11849,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nameLocation": "3803:9:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3790:22:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 11848,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3790:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3775:38:57"
                        },
                        "returnParameters": {
                            "id": 11853,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11852,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11871,
                                    "src": "3837:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11851,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3837:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3836:9:57"
                        },
                        "scope": 12122,
                        "src": "3759:227:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11917,
                            "nodeType": "Block",
                            "src": "4373:203:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11887
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11887,
                                            "mutability": "mutable",
                                            "name": "s",
                                            "nameLocation": "4391:1:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11917,
                                            "src": "4383:9:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            },
                                            "typeName": {
                                                "id": 11886,
                                                "name": "bytes32",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4383:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11894,
                                    "initialValue": {
                                        "commonType": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        },
                                        "id": 11893,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 11888,
                                            "name": "vs",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11878,
                                            "src": "4395:2:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "hexValue": "307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666",
                                                    "id": 11891,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4408:66:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
                                                        "typeString": "int_const 5789...(69 digits omitted)...9967"
                                                    },
                                                    "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1",
                                                        "typeString": "int_const 5789...(69 digits omitted)...9967"
                                                    }
                                                ],
                                                "id": 11890,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "4400:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                                    "typeString": "type(bytes32)"
                                                },
                                                "typeName": {
                                                    "id": 11889,
                                                    "name": "bytes32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "4400:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 11892,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "4400:75:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                            }
                                        },
                                        "src": "4395:80:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4383:92:57"
                                },
                                {
                                    "assignments": [
                                        11896
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11896,
                                            "mutability": "mutable",
                                            "name": "v",
                                            "nameLocation": "4491:1:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11917,
                                            "src": "4485:7:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "typeName": {
                                                "id": 11895,
                                                "name": "uint8",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4485:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11909,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                "id": 11907,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "components": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            },
                                                            "id": 11904,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "id": 11901,
                                                                        "name": "vs",
                                                                        "nodeType": "Identifier",
                                                                        "overloadedDeclarations": [],
                                                                        "referencedDeclaration": 11878,
                                                                        "src": "4510:2:57",
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_bytes32",
                                                                            "typeString": "bytes32"
                                                                        }
                                                                    ],
                                                                    "id": 11900,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "4502:7:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_uint256_$",
                                                                        "typeString": "type(uint256)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 11899,
                                                                        "name": "uint256",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "4502:7:57",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 11902,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "4502:11:57",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": ">>",
                                                            "rightExpression": {
                                                                "hexValue": "323535",
                                                                "id": 11903,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "4517:3:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_rational_255_by_1",
                                                                    "typeString": "int_const 255"
                                                                },
                                                                "value": "255"
                                                            },
                                                            "src": "4502:18:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11905,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "4501:20:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "+",
                                                "rightExpression": {
                                                    "hexValue": "3237",
                                                    "id": 11906,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "4524:2:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_27_by_1",
                                                        "typeString": "int_const 27"
                                                    },
                                                    "value": "27"
                                                },
                                                "src": "4501:25:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 11898,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "4495:5:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_uint8_$",
                                                "typeString": "type(uint8)"
                                            },
                                            "typeName": {
                                                "id": 11897,
                                                "name": "uint8",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4495:5:57",
                                                "typeDescriptions": {}
                                            }
                                        },
                                        "id": 11908,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4495:32:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4485:42:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11911,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11874,
                                                "src": "4555:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11912,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11896,
                                                "src": "4561:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 11913,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11876,
                                                "src": "4564:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11914,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11887,
                                                "src": "4567:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 11910,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 12029,
                                            "src": "4544:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11915,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4544:25:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "functionReturnParameters": 11885,
                                    "id": 11916,
                                    "nodeType": "Return",
                                    "src": "4537:32:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11872,
                            "nodeType": "StructuredDocumentation",
                            "src": "3992:243:57",
                            "text": " @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n _Available since v4.3._"
                        },
                        "id": 11918,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "4249:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11879,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11874,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "4277:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4269:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11873,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4269:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11876,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "4299:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4291:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11875,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4291:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11878,
                                    "mutability": "mutable",
                                    "name": "vs",
                                    "nameLocation": "4318:2:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4310:10:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11877,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4310:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4259:67:57"
                        },
                        "returnParameters": {
                            "id": 11885,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11881,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4350:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11880,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4350:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11884,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11918,
                                    "src": "4359:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11883,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11882,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "4359:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "4359:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4349:23:57"
                        },
                        "scope": 12122,
                        "src": "4240:336:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 11947,
                            "nodeType": "Block",
                            "src": "4857:136:57",
                            "statements": [
                                {
                                    "assignments": [
                                        11931,
                                        11934
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11931,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "4876:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11947,
                                            "src": "4868:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11930,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "4868:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 11934,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "4900:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 11947,
                                            "src": "4887:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 11933,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 11932,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "4887:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "4887:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 11940,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 11936,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11921,
                                                "src": "4920:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11937,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11923,
                                                "src": "4926:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 11938,
                                                "name": "vs",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11925,
                                                "src": "4929:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 11935,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 11918,
                                            "src": "4909:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 11939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4909:23:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "4867:65:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 11942,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11934,
                                                "src": "4954:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 11941,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "4942:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 11943,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4942:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 11944,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4942:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 11945,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11931,
                                        "src": "4977:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 11929,
                                    "id": 11946,
                                    "nodeType": "Return",
                                    "src": "4970:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11919,
                            "nodeType": "StructuredDocumentation",
                            "src": "4582:154:57",
                            "text": " @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n _Available since v4.2._"
                        },
                        "id": 11948,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "4750:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11926,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11921,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "4775:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4767:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11920,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4767:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11923,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "4797:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4789:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11922,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4789:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11925,
                                    "mutability": "mutable",
                                    "name": "vs",
                                    "nameLocation": "4816:2:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4808:10:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11924,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4808:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4757:67:57"
                        },
                        "returnParameters": {
                            "id": 11929,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11928,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 11948,
                                    "src": "4848:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11927,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4848:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4847:9:57"
                        },
                        "scope": 12122,
                        "src": "4741:252:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12028,
                            "nodeType": "Block",
                            "src": "5316:1454:57",
                            "statements": [
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        },
                                        "id": 11970,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "arguments": [
                                                {
                                                    "id": 11967,
                                                    "name": "s",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11957,
                                                    "src": "6212:1:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                ],
                                                "id": 11966,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "6204:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_uint256_$",
                                                    "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                    "id": 11965,
                                                    "name": "uint256",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6204:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 11968,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6204:10:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">",
                                        "rightExpression": {
                                            "hexValue": "307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130",
                                            "id": 11969,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6217:66:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1",
                                                "typeString": "int_const 5789...(69 digits omitted)...7168"
                                            },
                                            "value": "0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"
                                        },
                                        "src": "6204:79:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 11980,
                                    "nodeType": "IfStatement",
                                    "src": "6200:161:57",
                                    "trueBody": {
                                        "id": 11979,
                                        "nodeType": "Block",
                                        "src": "6285:76:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11973,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6315:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11972,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6307:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11971,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6307:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11974,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6307:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11975,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6319:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11976,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureS",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11742,
                                                            "src": "6319:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11977,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6306:44:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 11978,
                                                "nodeType": "Return",
                                                "src": "6299:51:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "id": 11987,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "id": 11983,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11981,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6374:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "3237",
                                                "id": 11982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6379:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_27_by_1",
                                                    "typeString": "int_const 27"
                                                },
                                                "value": "27"
                                            },
                                            "src": "6374:7:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "&&",
                                        "rightExpression": {
                                            "commonType": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            },
                                            "id": 11986,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                                "id": 11984,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6385:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "!=",
                                            "rightExpression": {
                                                "hexValue": "3238",
                                                "id": 11985,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "6390:2:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_28_by_1",
                                                    "typeString": "int_const 28"
                                                },
                                                "value": "28"
                                            },
                                            "src": "6385:7:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                            }
                                        },
                                        "src": "6374:18:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 11997,
                                    "nodeType": "IfStatement",
                                    "src": "6370:100:57",
                                    "trueBody": {
                                        "id": 11996,
                                        "nodeType": "Block",
                                        "src": "6394:76:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 11990,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6424:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 11989,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6416:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 11988,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6416:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 11991,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6416:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 11992,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6428:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 11993,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignatureV",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11743,
                                                            "src": "6428:30:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 11994,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6415:44:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 11995,
                                                "nodeType": "Return",
                                                "src": "6408:51:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "assignments": [
                                        11999
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 11999,
                                            "mutability": "mutable",
                                            "name": "signer",
                                            "nameLocation": "6572:6:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12028,
                                            "src": "6564:14:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 11998,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "6564:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12006,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 12001,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11951,
                                                "src": "6591:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12002,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11953,
                                                "src": "6597:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 12003,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11955,
                                                "src": "6600:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12004,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11957,
                                                "src": "6603:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 12000,
                                            "name": "ecrecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967290,
                                            "src": "6581:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                            }
                                        },
                                        "id": 12005,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6581:24:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6564:41:57"
                                },
                                {
                                    "condition": {
                                        "commonType": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        },
                                        "id": 12012,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                            "id": 12007,
                                            "name": "signer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11999,
                                            "src": "6619:6:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                            "arguments": [
                                                {
                                                    "hexValue": "30",
                                                    "id": 12010,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "6637:1:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    },
                                                    "value": "0"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_rational_0_by_1",
                                                        "typeString": "int_const 0"
                                                    }
                                                ],
                                                "id": 12009,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "6629:7:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_type$_t_address_$",
                                                    "typeString": "type(address)"
                                                },
                                                "typeName": {
                                                    "id": 12008,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "6629:7:57",
                                                    "typeDescriptions": {}
                                                }
                                            },
                                            "id": 12011,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "typeConversion",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6629:10:57",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "src": "6619:20:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "id": 12022,
                                    "nodeType": "IfStatement",
                                    "src": "6615:101:57",
                                    "trueBody": {
                                        "id": 12021,
                                        "nodeType": "Block",
                                        "src": "6641:75:57",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "components": [
                                                        {
                                                            "arguments": [
                                                                {
                                                                    "hexValue": "30",
                                                                    "id": 12015,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "kind": "number",
                                                                    "lValueRequested": false,
                                                                    "nodeType": "Literal",
                                                                    "src": "6671:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    },
                                                                    "value": "0"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "argumentTypes": [
                                                                    {
                                                                        "typeIdentifier": "t_rational_0_by_1",
                                                                        "typeString": "int_const 0"
                                                                    }
                                                                ],
                                                                "id": 12014,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "lValueRequested": false,
                                                                "nodeType": "ElementaryTypeNameExpression",
                                                                "src": "6663:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_address_$",
                                                                    "typeString": "type(address)"
                                                                },
                                                                "typeName": {
                                                                    "id": 12013,
                                                                    "name": "address",
                                                                    "nodeType": "ElementaryTypeName",
                                                                    "src": "6663:7:57",
                                                                    "typeDescriptions": {}
                                                                }
                                                            },
                                                            "id": 12016,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "typeConversion",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "6663:10:57",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "expression": {
                                                                "id": 12017,
                                                                "name": "RecoverError",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11744,
                                                                "src": "6675:12:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                                    "typeString": "type(enum ECDSA.RecoverError)"
                                                                }
                                                            },
                                                            "id": 12018,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "memberName": "InvalidSignature",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11740,
                                                            "src": "6675:29:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                                "typeString": "enum ECDSA.RecoverError"
                                                            }
                                                        }
                                                    ],
                                                    "id": 12019,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "6662:43:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "functionReturnParameters": 11964,
                                                "id": 12020,
                                                "nodeType": "Return",
                                                "src": "6655:50:57"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "expression": {
                                        "components": [
                                            {
                                                "id": 12023,
                                                "name": "signer",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 11999,
                                                "src": "6734:6:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "expression": {
                                                    "id": 12024,
                                                    "name": "RecoverError",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 11744,
                                                    "src": "6742:12:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_enum$_RecoverError_$11744_$",
                                                        "typeString": "type(enum ECDSA.RecoverError)"
                                                    }
                                                },
                                                "id": 12025,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "memberName": "NoError",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 11739,
                                                "src": "6742:20:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "id": 12026,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6733:30:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "functionReturnParameters": 11964,
                                    "id": 12027,
                                    "nodeType": "Return",
                                    "src": "6726:37:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 11949,
                            "nodeType": "StructuredDocumentation",
                            "src": "4999:163:57",
                            "text": " @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately.\n _Available since v4.3._"
                        },
                        "id": 12029,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "tryRecover",
                        "nameLocation": "5176:10:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 11958,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11951,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "5204:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5196:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11950,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5196:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11953,
                                    "mutability": "mutable",
                                    "name": "v",
                                    "nameLocation": "5224:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5218:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 11952,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5218:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11955,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "5243:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5235:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11954,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5235:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11957,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "5262:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5254:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 11956,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5254:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5186:83:57"
                        },
                        "returnParameters": {
                            "id": 11964,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 11960,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5293:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 11959,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5293:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 11963,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12029,
                                    "src": "5302:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_RecoverError_$11744",
                                        "typeString": "enum ECDSA.RecoverError"
                                    },
                                    "typeName": {
                                        "id": 11962,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 11961,
                                            "name": "RecoverError",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 11744,
                                            "src": "5302:12:57"
                                        },
                                        "referencedDeclaration": 11744,
                                        "src": "5302:12:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_RecoverError_$11744",
                                            "typeString": "enum ECDSA.RecoverError"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5292:23:57"
                        },
                        "scope": 12122,
                        "src": "5167:1603:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12061,
                            "nodeType": "Block",
                            "src": "7035:138:57",
                            "statements": [
                                {
                                    "assignments": [
                                        12044,
                                        12047
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 12044,
                                            "mutability": "mutable",
                                            "name": "recovered",
                                            "nameLocation": "7054:9:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12061,
                                            "src": "7046:17:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            },
                                            "typeName": {
                                                "id": 12043,
                                                "name": "address",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "7046:7:57",
                                                "stateMutability": "nonpayable",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "visibility": "internal"
                                        },
                                        {
                                            "constant": false,
                                            "id": 12047,
                                            "mutability": "mutable",
                                            "name": "error",
                                            "nameLocation": "7078:5:57",
                                            "nodeType": "VariableDeclaration",
                                            "scope": 12061,
                                            "src": "7065:18:57",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                "typeString": "enum ECDSA.RecoverError"
                                            },
                                            "typeName": {
                                                "id": 12046,
                                                "nodeType": "UserDefinedTypeName",
                                                "pathNode": {
                                                    "id": 12045,
                                                    "name": "RecoverError",
                                                    "nodeType": "IdentifierPath",
                                                    "referencedDeclaration": 11744,
                                                    "src": "7065:12:57"
                                                },
                                                "referencedDeclaration": 11744,
                                                "src": "7065:12:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            },
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 12054,
                                    "initialValue": {
                                        "arguments": [
                                            {
                                                "id": 12049,
                                                "name": "hash",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12032,
                                                "src": "7098:4:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12050,
                                                "name": "v",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12034,
                                                "src": "7104:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                }
                                            },
                                            {
                                                "id": 12051,
                                                "name": "r",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12036,
                                                "src": "7107:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            },
                                            {
                                                "id": 12052,
                                                "name": "s",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12038,
                                                "src": "7110:1:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                }
                                            ],
                                            "id": 12048,
                                            "name": "tryRecover",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                11844,
                                                11918,
                                                12029
                                            ],
                                            "referencedDeclaration": 12029,
                                            "src": "7087:10:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$11744_$",
                                                "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError)"
                                            }
                                        },
                                        "id": 12053,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7087:25:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_address_$_t_enum$_RecoverError_$11744_$",
                                            "typeString": "tuple(address,enum ECDSA.RecoverError)"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "7045:67:57"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 12056,
                                                "name": "error",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 12047,
                                                "src": "7134:5:57",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_enum$_RecoverError_$11744",
                                                    "typeString": "enum ECDSA.RecoverError"
                                                }
                                            ],
                                            "id": 12055,
                                            "name": "_throwError",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 11798,
                                            "src": "7122:11:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_enum$_RecoverError_$11744_$returns$__$",
                                                "typeString": "function (enum ECDSA.RecoverError) pure"
                                            }
                                        },
                                        "id": 12057,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7122:18:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 12058,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7122:18:57"
                                },
                                {
                                    "expression": {
                                        "id": 12059,
                                        "name": "recovered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 12044,
                                        "src": "7157:9:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "functionReturnParameters": 12042,
                                    "id": 12060,
                                    "nodeType": "Return",
                                    "src": "7150:16:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12030,
                            "nodeType": "StructuredDocumentation",
                            "src": "6776:122:57",
                            "text": " @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."
                        },
                        "id": 12062,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "recover",
                        "nameLocation": "6912:7:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12039,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12032,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "6937:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6929:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12031,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6929:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12034,
                                    "mutability": "mutable",
                                    "name": "v",
                                    "nameLocation": "6957:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6951:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 12033,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6951:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12036,
                                    "mutability": "mutable",
                                    "name": "r",
                                    "nameLocation": "6976:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6968:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12035,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6968:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12038,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "6995:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "6987:9:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12037,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6987:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6919:83:57"
                        },
                        "returnParameters": {
                            "id": 12042,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12041,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12062,
                                    "src": "7026:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 12040,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7026:7:57",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7025:9:57"
                        },
                        "scope": 12122,
                        "src": "6903:270:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12078,
                            "nodeType": "Block",
                            "src": "7541:187:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a3332",
                                                        "id": 12073,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7679:34:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                                        },
                                                        "value": "\u0019Ethereum Signed Message:\n32"
                                                    },
                                                    {
                                                        "id": 12074,
                                                        "name": "hash",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12065,
                                                        "src": "7715:4:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_178a2411ab6fbc1ba11064408972259c558d0e82fd48b0aba3ad81d14f065e73",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a3332\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12071,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "7662:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12072,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "7662:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12075,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7662:58:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12070,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "7652:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12076,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7652:69:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12069,
                                    "id": 12077,
                                    "nodeType": "Return",
                                    "src": "7645:76:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12063,
                            "nodeType": "StructuredDocumentation",
                            "src": "7179:279:57",
                            "text": " @dev Returns an Ethereum Signed Message, created from a `hash`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."
                        },
                        "id": 12079,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toEthSignedMessageHash",
                        "nameLocation": "7472:22:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12066,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12065,
                                    "mutability": "mutable",
                                    "name": "hash",
                                    "nameLocation": "7503:4:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12079,
                                    "src": "7495:12:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12064,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7495:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7494:14:57"
                        },
                        "returnParameters": {
                            "id": 12069,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12068,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12079,
                                    "src": "7532:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12067,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7532:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7531:9:57"
                        },
                        "scope": 12122,
                        "src": "7463:265:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12100,
                            "nodeType": "Block",
                            "src": "8093:116:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "19457468657265756d205369676e6564204d6573736167653a0a",
                                                        "id": 12090,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8137:32:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""
                                                        },
                                                        "value": "\u0019Ethereum Signed Message:\n"
                                                    },
                                                    {
                                                        "arguments": [
                                                            {
                                                                "expression": {
                                                                    "id": 12093,
                                                                    "name": "s",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 12082,
                                                                    "src": "8188:1:57",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                                        "typeString": "bytes memory"
                                                                    }
                                                                },
                                                                "id": 12094,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "length",
                                                                "nodeType": "MemberAccess",
                                                                "src": "8188:8:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            }
                                                        ],
                                                        "expression": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "expression": {
                                                                "id": 12091,
                                                                "name": "Strings",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 11734,
                                                                "src": "8171:7:57",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_type$_t_contract$_Strings_$11734_$",
                                                                    "typeString": "type(library Strings)"
                                                                }
                                                            },
                                                            "id": 12092,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "memberName": "toString",
                                                            "nodeType": "MemberAccess",
                                                            "referencedDeclaration": 11596,
                                                            "src": "8171:16:57",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                                                "typeString": "function (uint256) pure returns (string memory)"
                                                            }
                                                        },
                                                        "id": 12095,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "kind": "functionCall",
                                                        "lValueRequested": false,
                                                        "names": [],
                                                        "nodeType": "FunctionCall",
                                                        "src": "8171:26:57",
                                                        "tryCall": false,
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        }
                                                    },
                                                    {
                                                        "id": 12096,
                                                        "name": "s",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12082,
                                                        "src": "8199:1:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4",
                                                            "typeString": "literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_string_memory_ptr",
                                                            "typeString": "string memory"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes_memory_ptr",
                                                            "typeString": "bytes memory"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12088,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "8120:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12089,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8120:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12097,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8120:81:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12087,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "8110:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12098,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8110:92:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12086,
                                    "id": 12099,
                                    "nodeType": "Return",
                                    "src": "8103:99:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12080,
                            "nodeType": "StructuredDocumentation",
                            "src": "7734:274:57",
                            "text": " @dev Returns an Ethereum Signed Message, created from `s`. This\n produces hash corresponding to the one signed with the\n https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\n JSON-RPC method as part of EIP-191.\n See {recover}."
                        },
                        "id": 12101,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toEthSignedMessageHash",
                        "nameLocation": "8022:22:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12083,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12082,
                                    "mutability": "mutable",
                                    "name": "s",
                                    "nameLocation": "8058:1:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12101,
                                    "src": "8045:14:57",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 12081,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8045:5:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8044:16:57"
                        },
                        "returnParameters": {
                            "id": 12086,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12085,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12101,
                                    "src": "8084:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12084,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8084:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8083:9:57"
                        },
                        "scope": 12122,
                        "src": "8013:196:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 12120,
                            "nodeType": "Block",
                            "src": "8650:92:57",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "1901",
                                                        "id": 12114,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8694:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        "value": "\u0019\u0001"
                                                    },
                                                    {
                                                        "id": 12115,
                                                        "name": "domainSeparator",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12104,
                                                        "src": "8706:15:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    },
                                                    {
                                                        "id": 12116,
                                                        "name": "structHash",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 12106,
                                                        "src": "8723:10:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                                                            "typeString": "literal_string hex\"1901\""
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_bytes32",
                                                            "typeString": "bytes32"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "id": 12112,
                                                        "name": "abi",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 4294967295,
                                                        "src": "8677:3:57",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_abi",
                                                            "typeString": "abi"
                                                        }
                                                    },
                                                    "id": 12113,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "memberName": "encodePacked",
                                                    "nodeType": "MemberAccess",
                                                    "src": "8677:16:57",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                                        "typeString": "function () pure returns (bytes memory)"
                                                    }
                                                },
                                                "id": 12117,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8677:57:57",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                }
                                            ],
                                            "id": 12111,
                                            "name": "keccak256",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967288,
                                            "src": "8667:9:57",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                                "typeString": "function (bytes memory) pure returns (bytes32)"
                                            }
                                        },
                                        "id": 12118,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8667:68:57",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "functionReturnParameters": 12110,
                                    "id": 12119,
                                    "nodeType": "Return",
                                    "src": "8660:75:57"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 12102,
                            "nodeType": "StructuredDocumentation",
                            "src": "8215:328:57",
                            "text": " @dev Returns an Ethereum Signed Typed Data, created from a\n `domainSeparator` and a `structHash`. This produces hash corresponding\n to the one signed with the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\n JSON-RPC method as part of EIP-712.\n See {recover}."
                        },
                        "id": 12121,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "toTypedDataHash",
                        "nameLocation": "8557:15:57",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 12107,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12104,
                                    "mutability": "mutable",
                                    "name": "domainSeparator",
                                    "nameLocation": "8581:15:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8573:23:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12103,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8573:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 12106,
                                    "mutability": "mutable",
                                    "name": "structHash",
                                    "nameLocation": "8606:10:57",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8598:18:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12105,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8598:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8572:45:57"
                        },
                        "returnParameters": {
                            "id": 12110,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 12109,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 12121,
                                    "src": "8641:7:57",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                    },
                                    "typeName": {
                                        "id": 12108,
                                        "name": "bytes32",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8641:7:57",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8640:9:57"
                        },
                        "scope": 12122,
                        "src": "8548:194:57",
                        "stateMutability": "pure",
                        "virtual": false,
                        "visibility": "internal"
                    }
                ],
                "scope": 12123,
                "src": "369:8375:57",
                "usedErrors": []
            }
        ],
        "src": "112:8633:57"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.280Z",
    "devdoc": {
        "details": "Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.",
        "kind": "dev",
        "methods": {},
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
    }
}
