{
  "contractName": "RSA",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "N",
          "type": "bytes"
        },
        {
          "name": "E",
          "type": "bytes"
        },
        {
          "name": "S",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "bytesArr",
          "type": "bytes"
        }
      ],
      "name": "sliceLastBytes32",
      "outputs": [
        {
          "name": "result",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061034b806100206000396000f30060806040526004361061004b5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166332af79c78114610050578063c658da51146100bb575b600080fd5b34801561005c57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100a994369492936024939284019190819084018382808284375094975061010b9650505050505050565b60408051918252519081900360200190f35b3480156100c757600080fd5b506100f7600480359060248035808201929081013591604435808201929081013591606435908101910135610112565b604080519115158252519081900360200190f35b8051015190565b600080606060006101b886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505089898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437506101e8945050505050565b90935091506101c68261010b565b905060018315151480156101d95750808b145b9b9a5050505050505050505050565b60006060600080600080606089519450885193508751925082848660600101019150816040519080825280601f01601f191660200182016040528015610238578160200160208202803883390190505b509050826040519080825280601f01601f191660200182016040528015610269578160200160208202803883390190505b50955084602082015283604082015282606082015261028d8a6000836060896102ce565b61029e8960008388606001886102ce565b6102b188600083878960600101876102ce565b8260208701836020840160055afa96505050505050935093915050565b93830160209081019492820101915b602081106102fc578451835260209485019490920191601f19016102dd565b6001816020036101000a03801986511681855116808217865250505050505050505600a165627a7a723058206a648ba060f7fee80af7b70da56120b0162ae229f02f62f1707feefd753488070029",
  "deployedBytecode": "0x60806040526004361061004b5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166332af79c78114610050578063c658da51146100bb575b600080fd5b34801561005c57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100a994369492936024939284019190819084018382808284375094975061010b9650505050505050565b60408051918252519081900360200190f35b3480156100c757600080fd5b506100f7600480359060248035808201929081013591604435808201929081013591606435908101910135610112565b604080519115158252519081900360200190f35b8051015190565b600080606060006101b886868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505089898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437506101e8945050505050565b90935091506101c68261010b565b905060018315151480156101d95750808b145b9b9a5050505050505050505050565b60006060600080600080606089519450885193508751925082848660600101019150816040519080825280601f01601f191660200182016040528015610238578160200160208202803883390190505b509050826040519080825280601f01601f191660200182016040528015610269578160200160208202803883390190505b50955084602082015283604082015282606082015261028d8a6000836060896102ce565b61029e8960008388606001886102ce565b6102b188600083878960600101876102ce565b8260208701836020840160055afa96505050505050935093915050565b93830160209081019492820101915b602081106102fc578451835260209485019490920191601f19016102dd565b6001816020036101000a03801986511681855116808217865250505050505050505600a165627a7a723058206a648ba060f7fee80af7b70da56120b0162ae229f02f62f1707feefd753488070029",
  "sourceMap": "149:3147:15:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;149:3147:15;;;;;;;",
  "deployedSourceMap": "149:3147:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3089:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3089:204:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3089:204:15;;-1:-1:-1;3089:204:15;;-1:-1:-1;;;;;;;3089:204:15;;;;;;;;;;;;;;;;;374:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;374:279:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3089:204;3191:15;;3255:21;3249:28;;3225:62::o;374:279::-;455:4;471:9;490:17;557:14;532:15;539:1;;532:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;542:1;;532:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;545:1;;532:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;532:6:15;;-1:-1:-1;;;;;532:15:15:i;:::-;517:30;;-1:-1:-1;517:30:15;-1:-1:-1;574:22:15;517:30;574:16;:22::i;:::-;557:39;-1:-1:-1;622:4:15;614:12;;;;:31;;;;-1:-1:-1;630:15:15;;;614:31;606:40;374:279;-1:-1:-1;;;;;;;;;;;374:279:15:o;1778:1305::-;1860:12;1874;1898:16;1938:20;1986:19;2069:9;2148:18;1917:4;:11;1898:30;;1961:8;:15;1938:38;;2008:7;:14;1986:36;;2124:14;2106:15;2092:11;2082:6;2081:22;:40;:57;2069:69;;2179:4;2169:15;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2169:15:15;;2148:36;;2253:14;2243:25;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;2243:25:15;;2234:34;;2425:11;2420:2;2413:5;2409:14;2402:35;2508:15;2503:2;2496:5;2492:14;2485:39;2560:14;2555:2;2548:5;2544:14;2537:38;2628:40;2636:4;2642:1;2645:5;2652:2;2656:11;2628:7;:40::i;:::-;2715:62;2723:8;2733:1;2736:5;2748:11;2743:2;:16;2761:15;2715:7;:62::i;:::-;2823:78;2831:7;2840:1;2843:5;2869:15;2855:11;2850:2;:16;:34;2886:14;2823:7;:78::i;:::-;3052:14;3047:2;3039:6;3035:15;3029:4;3024:2;3017:5;3013:14;3010:1;3003:5;2992:75;2981:86;;2967:110;;;;;;;;;;;:::o;659:1113::-;840:28;;;853:2;840:28;;;;888;;;;;967:420;1042:2;1034:11;;967:420;;1374:10;;1362:23;;1119:2;1191:12;;;;1110;;;;-1:-1:-1;;1266:12:15;967:420;;;1489:1;1482:3;1478:2;1474:12;1469:3;1465:22;1461:30;1558:4;1554:9;1548:3;1542:10;1538:26;1633:4;1627:3;1621:10;1617:21;1706:7;1697;1694:20;1689:3;1682:33;773:993;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.17;\n\n/**\n@title contract for verify RSA sign\n@dev contract contains the necessary changes for sign hash\n@author Nick Johnson\n*/\ncontract RSA {\n\n    /**\n    @notice Verify of RSA sign\n    @param _hash raw message\n    @param N N-component of RSA public keys\n    @param E E-component of RSA public keys\n    @param S Signature of the raw message\n    */\n    function verify(bytes32 _hash, bytes N, bytes E, bytes S) external view returns (bool) {\n        bool retS;\n        bytes memory valS;\n        (retS, valS) = modexp(S, E, N);\n        bytes32 valS32 = sliceLastBytes32(valS);\n        return (retS == true && valS32 == _hash);\n    }\n\n    function memcopy(bytes src, uint srcoffset, bytes dst, uint dstoffset, uint len) pure internal {\n        assembly {\n            //begining of data in src and dst\n            src := add(src, add(32, srcoffset))\n            dst := add(dst, add(32, dstoffset))\n\n            // copy 32 bytes at once\n            for\n                {} //counter not needed\n                iszero(lt(len, 32)) //untill (len>32)\n                {\n                    dst := add(dst, 32) //destination pointer shift to 32 bytes \n                    src := add(src, 32) //source pointer shift to 32 bytes\n                    len := sub(len, 32) //length of the remainder decrease to 32 bytes\n                }\n                { mstore(dst, mload(src)) }\n            // copy the remainder (0 < len < 32)\n            let mask := sub(exp(256, sub(32, len)), 1) //256^(32-len) - 1\n            let srcpart := and(mload(src), not(mask)) //select first len bytes\n            let dstpart := and(mload(dst), mask)  //set to zero first len bytes\n            mstore(dst, or(srcpart, dstpart))   //first len bits of source copy to dst\n        }\n    }\n\n    function modexp(bytes base, bytes exponent, bytes modulus) internal view returns (bool success, bytes output) {\n        uint base_length = base.length;\n        uint exponent_length = exponent.length;\n        uint modulus_length = modulus.length;\n\n        //Allocate memory for input\n        uint size = (32 * 3) + base_length + exponent_length + modulus_length;\n        bytes memory input = new bytes(size);\n\n        ////Allocate memory for output\n        output = new bytes(modulus_length);\n\n        //Push lengths on the stack\n        assembly {\n            //mstore(addr, src) - push src to addr on the stack\n            mstore(add(input, 32), base_length) //push base_length on the bytes[0]\n            mstore(add(input, 64), exponent_length)\n            mstore(add(input, 96), modulus_length) \n        }\n        //push base on the stack\n        memcopy(base, 0, input, 96, base_length);\n        //push exponent on the stack\n        memcopy(exponent, 0, input, 96 + base_length, exponent_length);\n        //push modulus on the stack\n        memcopy(modulus, 0, input, 96 + base_length + exponent_length, modulus_length);\n\n        //call bigModExp precompiled contract\n        assembly {\n            success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n        }\n    }\n\n    function sliceLastBytes32(bytes bytesArr) public pure returns(bytes32 result) {\n        uint length = bytesArr.length;\n        assembly {\n            result := mload(add(bytesArr, length))\n        }\n    }\n\n}",
  "sourcePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/signidice/rsa.sol",
  "ast": {
    "absolutePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/signidice/rsa.sol",
    "exportedSymbols": {
      "RSA": [
        2908
      ]
    },
    "id": 2909,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2745,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:15"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title contract for verify RSA sign\n@dev contract contains the necessary changes for sign hash\n@author Nick Johnson",
        "fullyImplemented": true,
        "id": 2908,
        "linearizedBaseContracts": [
          2908
        ],
        "name": "RSA",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2789,
              "nodeType": "Block",
              "src": "461:192:15",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2759,
                      "name": "retS",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "471:9:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2758,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "471:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2760,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "471:9:15"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2762,
                      "name": "valS",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "490:17:15",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2761,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "490:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2763,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "490:17:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 2764,
                          "name": "retS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2759,
                          "src": "518:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2765,
                          "name": "valS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2762,
                          "src": "524:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 2766,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "517:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2768,
                          "name": "S",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "539:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2769,
                          "name": "E",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2751,
                          "src": "542:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2770,
                          "name": "N",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2749,
                          "src": "545:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 2767,
                        "name": "modexp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2893,
                        "src": "532:6:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                        }
                      },
                      "id": 2771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "532:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "517:30:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2773,
                  "nodeType": "ExpressionStatement",
                  "src": "517:30:15"
                },
                {
                  "assignments": [
                    2775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2775,
                      "name": "valS32",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "557:14:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2774,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "557:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2777,
                        "name": "valS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2762,
                        "src": "591:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2776,
                      "name": "sliceLastBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2907,
                      "src": "574:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "574:22:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "557:39:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2780,
                            "name": "retS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "614:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 2781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "622:4:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "614:12:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2783,
                            "name": "valS32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2775,
                            "src": "630:6:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2784,
                            "name": "_hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2747,
                            "src": "640:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "630:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "614:31:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 2787,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "613:33:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2757,
                  "id": 2788,
                  "nodeType": "Return",
                  "src": "606:40:15"
                }
              ]
            },
            "documentation": "@notice Verify of RSA sign\n@param _hash raw message\n@param N N-component of RSA public keys\n@param E E-component of RSA public keys\n@param S Signature of the raw message",
            "id": 2790,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2747,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "390:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2746,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "390:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2749,
                  "name": "N",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "405:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2748,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2751,
                  "name": "E",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "414:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2750,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2753,
                  "name": "S",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "423:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2752,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "423:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "389:42:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2756,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "455:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2755,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "455:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "454:6:15"
            },
            "scope": 2908,
            "src": "374:279:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2804,
              "nodeType": "Block",
              "src": "754:1018:15",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "833:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1103:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "892:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "881:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "844:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "srcoffset": {
                        "declaration": 2794,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "857:9:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dstoffset": {
                        "declaration": 2798,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "905:9:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1184:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1037:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1114:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1259:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1369:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1195:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1380:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1270:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1689:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1548:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1482:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1627:3:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2803,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    src := add(src, add(32, srcoffset))\n    dst := add(dst, add(32, dstoffset))\n    for {\n    }\n    iszero(lt(len, 32))\n    {\n        dst := add(dst, 32)\n        src := add(src, 32)\n        len := sub(len, 32)\n    }\n    {\n        mstore(dst, mload(src))\n    }\n    let mask := sub(exp(256, sub(32, len)), 1)\n    let srcpart := and(mload(src), not(mask))\n    let dstpart := and(mload(dst), mask)\n    mstore(dst, or(srcpart, dstpart))\n}",
                  "src": "764:1008:15"
                }
              ]
            },
            "documentation": null,
            "id": 2805,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcopy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2792,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "676:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2791,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "676:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2794,
                  "name": "srcoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "687:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2793,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2796,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "703:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2795,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2798,
                  "name": "dstoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "714:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2797,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "714:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2800,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "730:8:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2799,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "730:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "675:64:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2802,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "754:0:15"
            },
            "scope": 2908,
            "src": "659:1113:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2892,
              "nodeType": "Block",
              "src": "1888:1195:15",
              "statements": [
                {
                  "assignments": [
                    2819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2819,
                      "name": "base_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1898:16:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2818,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1898:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2822,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2820,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2807,
                      "src": "1917:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1917:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1898:30:15"
                },
                {
                  "assignments": [
                    2824
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2824,
                      "name": "exponent_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1938:20:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2823,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1938:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2827,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2825,
                      "name": "exponent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2809,
                      "src": "1961:8:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1961:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1938:38:15"
                },
                {
                  "assignments": [
                    2829
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2829,
                      "name": "modulus_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1986:19:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2828,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1986:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2832,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2830,
                      "name": "modulus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2811,
                      "src": "2008:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2008:14:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1986:36:15"
                },
                {
                  "assignments": [
                    2834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2834,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "2069:9:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2833,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2069:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2845,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2842,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "id": 2837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 2835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2082:2:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 2836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2087:1:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "2082:6:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              }
                            }
                          ],
                          "id": 2838,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2081:8:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2839,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2819,
                          "src": "2092:11:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2081:22:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2841,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2824,
                        "src": "2106:15:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2081:40:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2843,
                      "name": "modulus_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2829,
                      "src": "2124:14:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2081:57:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2069:69:15"
                },
                {
                  "assignments": [
                    2847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2847,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "2148:18:15",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2846,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2148:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2852,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2850,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2834,
                        "src": "2179:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2169:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 2848,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2173:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 2851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2169:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2148:36:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2853,
                      "name": "output",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2816,
                      "src": "2234:6:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2856,
                          "name": "modulus_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2829,
                          "src": "2253:14:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2243:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory)"
                        },
                        "typeName": {
                          "id": 2854,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2247:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        }
                      },
                      "id": 2857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2243:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "2234:34:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2859,
                  "nodeType": "ExpressionStatement",
                  "src": "2234:34:15"
                },
                {
                  "externalReferences": [
                    {
                      "base_length": {
                        "declaration": 2819,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2425:11:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2413:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "exponent_length": {
                        "declaration": 2824,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2508:15:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2496:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2829,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2560:14:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2548:5:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2860,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    mstore(add(input, 32), base_length)\n    mstore(add(input, 64), exponent_length)\n    mstore(add(input, 96), modulus_length)\n}",
                  "src": "2315:320:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2862,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2807,
                        "src": "2636:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2642:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2864,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2645:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3936",
                        "id": 2865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2652:2:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        "value": "96"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2866,
                        "name": "base_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2819,
                        "src": "2656:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2861,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2628:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2628:40:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2868,
                  "nodeType": "ExpressionStatement",
                  "src": "2628:40:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2870,
                        "name": "exponent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2809,
                        "src": "2723:8:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2733:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2872,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2736:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3936",
                          "id": 2873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2743:2:15",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          },
                          "value": "96"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2874,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2819,
                          "src": "2748:11:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2743:16:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2876,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2824,
                        "src": "2761:15:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2869,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2715:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2715:62:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2878,
                  "nodeType": "ExpressionStatement",
                  "src": "2715:62:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2880,
                        "name": "modulus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2811,
                        "src": "2831:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2840:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2882,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2843:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3936",
                            "id": 2883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2850:2:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "96"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2884,
                            "name": "base_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2819,
                            "src": "2855:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2850:16:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2886,
                          "name": "exponent_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2824,
                          "src": "2869:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2850:34:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2888,
                        "name": "modulus_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2829,
                        "src": "2886:14:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2879,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2823:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2823:78:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2890,
                  "nodeType": "ExpressionStatement",
                  "src": "2823:78:15"
                },
                {
                  "externalReferences": [
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3017:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "output": {
                        "declaration": 2816,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3039:6:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 2814,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2981:7:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 2834,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3029:4:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2829,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3052:14:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2891,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n}",
                  "src": "2958:125:15"
                }
              ]
            },
            "documentation": null,
            "id": 2893,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "modexp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2807,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1794:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2806,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1794:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2809,
                  "name": "exponent",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1806:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2808,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1806:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2811,
                  "name": "modulus",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1822:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2810,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1822:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1793:43:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2814,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1860:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2813,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1860:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2816,
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1874:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2815,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1859:28:15"
            },
            "scope": 2908,
            "src": "1778:1305:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2906,
              "nodeType": "Block",
              "src": "3167:126:15",
              "statements": [
                {
                  "assignments": [
                    2901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2901,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2907,
                      "src": "3177:11:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2900,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3177:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2904,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2902,
                      "name": "bytesArr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2895,
                      "src": "3191:8:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3191:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3177:29:15"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 2898,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3239:6:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "bytesArr": {
                        "declaration": 2895,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3259:8:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "length": {
                        "declaration": 2901,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3269:6:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2905,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := mload(add(bytesArr, length))\n}",
                  "src": "3216:77:15"
                }
              ]
            },
            "documentation": null,
            "id": 2907,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "sliceLastBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2895,
                  "name": "bytesArr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2907,
                  "src": "3115:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2894,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3115:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3114:16:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2898,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 2907,
                  "src": "3151:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2897,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3151:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3150:16:15"
            },
            "scope": 2908,
            "src": "3089:204:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2909,
        "src": "149:3147:15"
      }
    ],
    "src": "0:3296:15"
  },
  "legacyAST": {
    "absolutePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/signidice/rsa.sol",
    "exportedSymbols": {
      "RSA": [
        2908
      ]
    },
    "id": 2909,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2745,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".17"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:15"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title contract for verify RSA sign\n@dev contract contains the necessary changes for sign hash\n@author Nick Johnson",
        "fullyImplemented": true,
        "id": 2908,
        "linearizedBaseContracts": [
          2908
        ],
        "name": "RSA",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2789,
              "nodeType": "Block",
              "src": "461:192:15",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2759,
                      "name": "retS",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "471:9:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2758,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "471:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2760,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "471:9:15"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2762,
                      "name": "valS",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "490:17:15",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2761,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "490:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2763,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "490:17:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 2764,
                          "name": "retS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2759,
                          "src": "518:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2765,
                          "name": "valS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2762,
                          "src": "524:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 2766,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "517:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2768,
                          "name": "S",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2753,
                          "src": "539:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2769,
                          "name": "E",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2751,
                          "src": "542:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2770,
                          "name": "N",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2749,
                          "src": "545:1:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 2767,
                        "name": "modexp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2893,
                        "src": "532:6:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                        }
                      },
                      "id": 2771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "532:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "517:30:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2773,
                  "nodeType": "ExpressionStatement",
                  "src": "517:30:15"
                },
                {
                  "assignments": [
                    2775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2775,
                      "name": "valS32",
                      "nodeType": "VariableDeclaration",
                      "scope": 2790,
                      "src": "557:14:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2774,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "557:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2779,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2777,
                        "name": "valS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2762,
                        "src": "591:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2776,
                      "name": "sliceLastBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2907,
                      "src": "574:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "574:22:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "557:39:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2780,
                            "name": "retS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "614:4:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 2781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "622:4:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "614:12:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 2785,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2783,
                            "name": "valS32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2775,
                            "src": "630:6:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2784,
                            "name": "_hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2747,
                            "src": "640:5:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "630:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "614:31:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 2787,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "613:33:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2757,
                  "id": 2788,
                  "nodeType": "Return",
                  "src": "606:40:15"
                }
              ]
            },
            "documentation": "@notice Verify of RSA sign\n@param _hash raw message\n@param N N-component of RSA public keys\n@param E E-component of RSA public keys\n@param S Signature of the raw message",
            "id": 2790,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2747,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "390:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2746,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "390:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2749,
                  "name": "N",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "405:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2748,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "405:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2751,
                  "name": "E",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "414:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2750,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2753,
                  "name": "S",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "423:7:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2752,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "423:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "389:42:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2756,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2790,
                  "src": "455:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2755,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "455:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "454:6:15"
            },
            "scope": 2908,
            "src": "374:279:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2804,
              "nodeType": "Block",
              "src": "754:1018:15",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "833:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1103:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "892:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "881:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "844:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "srcoffset": {
                        "declaration": 2794,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "857:9:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dstoffset": {
                        "declaration": 2798,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "905:9:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1184:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1037:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1114:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1259:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1369:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1195:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1380:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1270:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1689:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2792,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1548:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2800,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1482:3:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2796,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "1627:3:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2803,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    src := add(src, add(32, srcoffset))\n    dst := add(dst, add(32, dstoffset))\n    for {\n    }\n    iszero(lt(len, 32))\n    {\n        dst := add(dst, 32)\n        src := add(src, 32)\n        len := sub(len, 32)\n    }\n    {\n        mstore(dst, mload(src))\n    }\n    let mask := sub(exp(256, sub(32, len)), 1)\n    let srcpart := and(mload(src), not(mask))\n    let dstpart := and(mload(dst), mask)\n    mstore(dst, or(srcpart, dstpart))\n}",
                  "src": "764:1008:15"
                }
              ]
            },
            "documentation": null,
            "id": 2805,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcopy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2792,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "676:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2791,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "676:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2794,
                  "name": "srcoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "687:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2793,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "687:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2796,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "703:9:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2795,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2798,
                  "name": "dstoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "714:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2797,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "714:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2800,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 2805,
                  "src": "730:8:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2799,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "730:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "675:64:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2802,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "754:0:15"
            },
            "scope": 2908,
            "src": "659:1113:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2892,
              "nodeType": "Block",
              "src": "1888:1195:15",
              "statements": [
                {
                  "assignments": [
                    2819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2819,
                      "name": "base_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1898:16:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2818,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1898:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2822,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2820,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2807,
                      "src": "1917:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1917:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1898:30:15"
                },
                {
                  "assignments": [
                    2824
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2824,
                      "name": "exponent_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1938:20:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2823,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1938:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2827,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2825,
                      "name": "exponent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2809,
                      "src": "1961:8:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1961:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1938:38:15"
                },
                {
                  "assignments": [
                    2829
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2829,
                      "name": "modulus_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1986:19:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2828,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1986:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2832,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2830,
                      "name": "modulus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2811,
                      "src": "2008:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "2008:14:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1986:36:15"
                },
                {
                  "assignments": [
                    2834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2834,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "2069:9:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2833,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2069:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2845,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2842,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "id": 2837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 2835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2082:2:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 2836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2087:1:15",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "2082:6:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              }
                            }
                          ],
                          "id": 2838,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2081:8:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2839,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2819,
                          "src": "2092:11:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2081:22:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2841,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2824,
                        "src": "2106:15:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2081:40:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2843,
                      "name": "modulus_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2829,
                      "src": "2124:14:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2081:57:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2069:69:15"
                },
                {
                  "assignments": [
                    2847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2847,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "2148:18:15",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2846,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2148:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2852,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2850,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2834,
                        "src": "2179:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2169:9:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 2848,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2173:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 2851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2169:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2148:36:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2853,
                      "name": "output",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2816,
                      "src": "2234:6:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2856,
                          "name": "modulus_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2829,
                          "src": "2253:14:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2243:9:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory)"
                        },
                        "typeName": {
                          "id": 2854,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2247:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        }
                      },
                      "id": 2857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2243:25:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "2234:34:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2859,
                  "nodeType": "ExpressionStatement",
                  "src": "2234:34:15"
                },
                {
                  "externalReferences": [
                    {
                      "base_length": {
                        "declaration": 2819,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2425:11:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2413:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "exponent_length": {
                        "declaration": 2824,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2508:15:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2496:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2829,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2560:14:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2548:5:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2860,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    mstore(add(input, 32), base_length)\n    mstore(add(input, 64), exponent_length)\n    mstore(add(input, 96), modulus_length)\n}",
                  "src": "2315:320:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2862,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2807,
                        "src": "2636:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2642:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2864,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2645:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3936",
                        "id": 2865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2652:2:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        "value": "96"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2866,
                        "name": "base_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2819,
                        "src": "2656:11:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2861,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2628:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2628:40:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2868,
                  "nodeType": "ExpressionStatement",
                  "src": "2628:40:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2870,
                        "name": "exponent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2809,
                        "src": "2723:8:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2733:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2872,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2736:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3936",
                          "id": 2873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2743:2:15",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          },
                          "value": "96"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2874,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2819,
                          "src": "2748:11:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2743:16:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2876,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2824,
                        "src": "2761:15:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2869,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2715:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2715:62:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2878,
                  "nodeType": "ExpressionStatement",
                  "src": "2715:62:15"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2880,
                        "name": "modulus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2811,
                        "src": "2831:7:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2840:1:15",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2882,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2847,
                        "src": "2843:5:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2885,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3936",
                            "id": 2883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2850:2:15",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "96"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2884,
                            "name": "base_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2819,
                            "src": "2855:11:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2850:16:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2886,
                          "name": "exponent_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2824,
                          "src": "2869:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2850:34:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2888,
                        "name": "modulus_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2829,
                        "src": "2886:14:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2879,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2805,
                      "src": "2823:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2823:78:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2890,
                  "nodeType": "ExpressionStatement",
                  "src": "2823:78:15"
                },
                {
                  "externalReferences": [
                    {
                      "input": {
                        "declaration": 2847,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3017:5:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "output": {
                        "declaration": 2816,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3039:6:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 2814,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2981:7:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 2834,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3029:4:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2829,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3052:14:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2891,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n}",
                  "src": "2958:125:15"
                }
              ]
            },
            "documentation": null,
            "id": 2893,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "modexp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2807,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1794:10:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2806,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1794:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2809,
                  "name": "exponent",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1806:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2808,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1806:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2811,
                  "name": "modulus",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1822:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2810,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1822:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1793:43:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2817,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2814,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1860:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2813,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1860:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2816,
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "scope": 2893,
                  "src": "1874:12:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2815,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1859:28:15"
            },
            "scope": 2908,
            "src": "1778:1305:15",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2906,
              "nodeType": "Block",
              "src": "3167:126:15",
              "statements": [
                {
                  "assignments": [
                    2901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2901,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2907,
                      "src": "3177:11:15",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2900,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3177:4:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2904,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2902,
                      "name": "bytesArr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2895,
                      "src": "3191:8:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3191:15:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3177:29:15"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 2898,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3239:6:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "bytesArr": {
                        "declaration": 2895,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3259:8:15",
                        "valueSize": 1
                      }
                    },
                    {
                      "length": {
                        "declaration": 2901,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3269:6:15",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2905,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := mload(add(bytesArr, length))\n}",
                  "src": "3216:77:15"
                }
              ]
            },
            "documentation": null,
            "id": 2907,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "sliceLastBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2895,
                  "name": "bytesArr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2907,
                  "src": "3115:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2894,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3115:5:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3114:16:15"
            },
            "payable": false,
            "returnParameters": {
              "id": 2899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2898,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 2907,
                  "src": "3151:14:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2897,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3151:7:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3150:16:15"
            },
            "scope": 2908,
            "src": "3089:204:15",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2909,
        "src": "149:3147:15"
      }
    ],
    "src": "0:3296:15"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.0-beta.0",
  "updatedAt": "2018-12-04T11:48:18.089Z"
}