{
  "contractName": "RSASHA1Algorithm",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "key",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "sig",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"key\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"verify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implements the DNSSEC RSASHA1 algorithm.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSASHA1Algorithm.sol\":\"RSASHA1Algorithm\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol\":{\"keccak256\":\"0x17b0123a981825ac9445ec82c8e20288321b27139518ba1f81c4cbd06f1312ab\",\"urls\":[\"bzz-raw://fe03e00240c645751873f38f56cc3db12d19a82538a0f0e9648ccfc23e8a715d\",\"dweb:/ipfs/QmbT7Q7GUgkZFY5gA4RxhWg3anPKiH9EZoM6HWBKDkK7dp\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol\":{\"keccak256\":\"0xc1e27c3d1787a2f22e877708760f3980f4febc25a5eab75f556c5cc3fffaea87\",\"urls\":[\"bzz-raw://b42522404011c767d9e1acf1f3f69b1b648bd8f0a99436433cb7d0c0c7ecc44c\",\"dweb:/ipfs/QmRd45RsUPf3HPMtCH7niRdDn1LSTyw3351VU9BKDJNwq4\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/ModexpPrecompile.sol\":{\"keccak256\":\"0x439209168162b319cbc197a58f2aee70dceb9e559acc612d272e496660c81683\",\"urls\":[\"bzz-raw://7b6cfb421acd55264fe00e6849e426fd8b8cf831861d9b8a3f519b689a7f8783\",\"dweb:/ipfs/QmP1txLavrJRggVRJ8TnWDVQMdb2ugi1PTFmf1PNNMDHQY\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSASHA1Algorithm.sol\":{\"keccak256\":\"0xb94b5268d1c1107fa280e382b513176f5add755bdd887ee504a38766741ac534\",\"urls\":[\"bzz-raw://86ed98d095695d27e84429b757f94370a2883c03e4e609f22a11f3fb1fbc6211\",\"dweb:/ipfs/QmRXUN5cAAdbWQq9kqxV31d5kbXCSs5EgfbwDruCZr4GRR\"]},\"/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSAVerify.sol\":{\"keccak256\":\"0xf6a0b278ce765d3217aef33fea057f83be09653ffcba00b181e065e4d3afdebf\",\"urls\":[\"bzz-raw://334b54c3200bbb55518bc7a47ca7fcfa6edf9de75a15117569b697914b9ff50d\",\"dweb:/ipfs/QmRAg4NQJV2ia8EsAcqdQXSXw4gXDT3g8p1KxShPoCXyXA\"]},\"@ensdomains/buffer/contracts/Buffer.sol\":{\"keccak256\":\"0x3dc6d79ec7994ddf8ce80248f2d53635254b8e5b19617ee257ae5857e9da1bd1\",\"urls\":[\"bzz-raw://f72312eafad4c9d6f9917a5f4bd0555011a26bfbf86313f9d8de374097e7b61c\",\"dweb:/ipfs/QmcCBXetT1ie4GtA1N6HckQeucq7er4jc1yUbypYvMBjZv\"]},\"@ensdomains/solsha1/contracts/SHA1.sol\":{\"keccak256\":\"0xf400ebc75f77539e256b05773b840a1908b7c79ac39863ea8e80a3408c90a30a\",\"urls\":[\"bzz-raw://7b2ff0c33b4215ce9eb2343ae83b8ed15a2d8b76c0d91c864ed691b15ad5a4b9\",\"dweb:/ipfs/Qme6LYwQDT1zcKzNjaFZssUKrhMNZoT1qPn4sw5ZckGp7c\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610ed2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b6101516004803603606081101561004657600080fd5b810190808035906020019064010000000081111561006357600080fd5b82018360208201111561007557600080fd5b8035906020019184600183028401116401000000008311171561009757600080fd5b9091929391929390803590602001906401000000008111156100b857600080fd5b8201836020820111156100ca57600080fd5b803590602001918460018302840111640100000000831117156100ec57600080fd5b90919293919293908035906020019064010000000081111561010d57600080fd5b82018360208201111561011f57600080fd5b8035906020019184600183028401116401000000008311171561014157600080fd5b9091929391929390505050610169565b60405180821515815260200191505060405180910390f35b600060608060006101c860048b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104cd90919063ffffffff16565b60ff16905060008161ffff16146102ac5761023760058261ffff168c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b92506102a56005820161ffff1660058361ffff168d8d905003038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b91506103d5565b61030460058b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061057b90919063ffffffff16565b905061036460078261ffff168c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b92506103d26007820161ffff1660078361ffff168d8d905003038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b91505b6000606061042884868a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506105a1565b80925081935050508180156104bc575061044f6014825103826105bc90919063ffffffff16565b6bffffffffffffffffffffffff19166104ab8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610600565b6bffffffffffffffffffffffff1916145b955050505050509695505050505050565b60008282815181106104db57fe5b602001015160f81c60f81b60f81c905092915050565b60608351828401111561050357600080fd5b60608267ffffffffffffffff8111801561051c57600080fd5b506040519080825280601f01601f19166020018201604052801561054f5781602001600182028036833780820191505090505b509050600080602083019150856020880101905061056e828287610b1e565b8293505050509392505050565b6000825160028301111561058e57600080fd5b61ffff8260028501015116905092915050565b600060606105b0838587610b67565b91509150935093915050565b600082516014830111156105cf57600080fd5b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008260208501015116905092915050565b60006040518251602084019350604067ffffffffffffffc06001830116016009828203106001811461063157610638565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610690565b6000838310156106895782820151905082840393506020841015610688576001846020036101000a03198082169150505b5b9392505050565b60005b82811015610a9e576106a6848289610657565b85526106b6846020830189610657565b6020860152604081850310600181146106ce576106d7565b60808286038701535b50604083038114600181146106eb576106fb565b6008850260208701511760208701525b5060405b60808110156107875760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c810190506106ff565b5060805b61014081101561081457608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc600483021617905080828801525060188101905061078b565b508160008060005b6050811015610a7057601481046000811461084e576001811461089857600281146108d5576003811461093857610971565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a8279999250610971565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba19250610971565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc9250610971565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff86161794505060018101905061081c565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610693565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b5b60208110610b425781518352602083019250602082019150602081039050610b1f565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60006060600083518551875160600101019050610b82610e82565b610b958282610c8490919063ffffffff16565b50610bad875160001b82610cd890919063ffffffff16565b50610bc5865160001b82610cd890919063ffffffff16565b50610bdd855160001b82610cd890919063ffffffff16565b50610bf18782610cfa90919063ffffffff16565b50610c058682610cfa90919063ffffffff16565b50610c198582610cfa90919063ffffffff16565b50845167ffffffffffffffff81118015610c3257600080fd5b506040519080825280601f01601f191660200182016040528015610c655781602001600182028036833780820191505090505b50925084516020840183602084510160055afa93505050935093915050565b610c8c610e82565b600060208381610c9857fe5b0614610cb15760208281610ca857fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b610ce0610e82565b610cf283846000015151846020610d1c565b905092915050565b610d02610e82565b610d1483846000015151848551610d89565b905092915050565b610d24610e82565b84602001518483011115610d4257610d4185600286850102610e42565b5b60006001836101000a0390508260200360080284901c93508551838682010185831982511617815281518588011115610d7b5784870182525b505085915050949350505050565b610d91610e82565b8251821115610d9f57600080fd5b84602001518285011115610dca57610dc9856002610dc38860200151888701610e66565b02610e42565b5b600080865180518760208301019350808887011115610de95787860182525b60208701925050505b60208410610e155780518252602082019150602081019050602084039350610df2565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b606082600001519050610e558383610c84565b50610e608382610cfa565b50505050565b600081831115610e7857829050610e7c565b8190505b92915050565b60405180604001604052806060815260200160008152509056fea2646970667358221220a272a235199b241dcc5d15d2706e54caba29df5772030551c27f008dbf99b2c464736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063de8f50a114610030575b600080fd5b6101516004803603606081101561004657600080fd5b810190808035906020019064010000000081111561006357600080fd5b82018360208201111561007557600080fd5b8035906020019184600183028401116401000000008311171561009757600080fd5b9091929391929390803590602001906401000000008111156100b857600080fd5b8201836020820111156100ca57600080fd5b803590602001918460018302840111640100000000831117156100ec57600080fd5b90919293919293908035906020019064010000000081111561010d57600080fd5b82018360208201111561011f57600080fd5b8035906020019184600183028401116401000000008311171561014157600080fd5b9091929391929390505050610169565b60405180821515815260200191505060405180910390f35b600060608060006101c860048b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104cd90919063ffffffff16565b60ff16905060008161ffff16146102ac5761023760058261ffff168c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b92506102a56005820161ffff1660058361ffff168d8d905003038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b91506103d5565b61030460058b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061057b90919063ffffffff16565b905061036460078261ffff168c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b92506103d26007820161ffff1660078361ffff168d8d905003038c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506104f19092919063ffffffff16565b91505b6000606061042884868a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506105a1565b80925081935050508180156104bc575061044f6014825103826105bc90919063ffffffff16565b6bffffffffffffffffffffffff19166104ab8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610600565b6bffffffffffffffffffffffff1916145b955050505050509695505050505050565b60008282815181106104db57fe5b602001015160f81c60f81b60f81c905092915050565b60608351828401111561050357600080fd5b60608267ffffffffffffffff8111801561051c57600080fd5b506040519080825280601f01601f19166020018201604052801561054f5781602001600182028036833780820191505090505b509050600080602083019150856020880101905061056e828287610b1e565b8293505050509392505050565b6000825160028301111561058e57600080fd5b61ffff8260028501015116905092915050565b600060606105b0838587610b67565b91509150935093915050565b600082516014830111156105cf57600080fd5b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008260208501015116905092915050565b60006040518251602084019350604067ffffffffffffffc06001830116016009828203106001811461063157610638565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610690565b6000838310156106895782820151905082840393506020841015610688576001846020036101000a03198082169150505b5b9392505050565b60005b82811015610a9e576106a6848289610657565b85526106b6846020830189610657565b6020860152604081850310600181146106ce576106d7565b60808286038701535b50604083038114600181146106eb576106fb565b6008850260208701511760208701525b5060405b60808110156107875760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c810190506106ff565b5060805b61014081101561081457608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc600483021617905080828801525060188101905061078b565b508160008060005b6050811015610a7057601481046000811461084e576001811461089857600281146108d5576003811461093857610971565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a8279999250610971565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba19250610971565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc9250610971565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff86161794505060018101905061081c565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610693565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b5b60208110610b425781518352602083019250602082019150602081039050610b1f565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60006060600083518551875160600101019050610b82610e82565b610b958282610c8490919063ffffffff16565b50610bad875160001b82610cd890919063ffffffff16565b50610bc5865160001b82610cd890919063ffffffff16565b50610bdd855160001b82610cd890919063ffffffff16565b50610bf18782610cfa90919063ffffffff16565b50610c058682610cfa90919063ffffffff16565b50610c198582610cfa90919063ffffffff16565b50845167ffffffffffffffff81118015610c3257600080fd5b506040519080825280601f01601f191660200182016040528015610c655781602001600182028036833780820191505090505b50925084516020840183602084510160055afa93505050935093915050565b610c8c610e82565b600060208381610c9857fe5b0614610cb15760208281610ca857fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b610ce0610e82565b610cf283846000015151846020610d1c565b905092915050565b610d02610e82565b610d1483846000015151848551610d89565b905092915050565b610d24610e82565b84602001518483011115610d4257610d4185600286850102610e42565b5b60006001836101000a0390508260200360080284901c93508551838682010185831982511617815281518588011115610d7b5784870182525b505085915050949350505050565b610d91610e82565b8251821115610d9f57600080fd5b84602001518285011115610dca57610dc9856002610dc38860200151888701610e66565b02610e42565b5b600080865180518760208301019350808887011115610de95787860182525b60208701925050505b60208410610e155780518252602082019150602081019050602084039350610df2565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b606082600001519050610e558383610c84565b50610e608382610cfa565b50505050565b600081831115610e7857829050610e7c565b8190505b92915050565b60405180604001604052806060815260200160008152509056fea2646970667358221220a272a235199b241dcc5d15d2706e54caba29df5772030551c27f008dbf99b2c464736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "210:994:11:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "210:994:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;284:918;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;393:4;409:21;440:20;471:18;499:16;513:1;499:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;;;;:::i;:::-;492:24;;471:45;;545:1;530:11;:16;;;526:371;;573:29;587:1;590:11;573:29;;:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;;:::i;:::-;562:40;;626:60;654:1;640:11;:15;626:60;;684:1;670:11;657:24;;:3;;:10;;:24;:28;626:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;:::i;:::-;616:70;;526:371;;;731:17;746:1;731:3;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;;;;:::i;:::-;717:31;;773:29;787:1;790:11;773:29;;:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;;:::i;:::-;762:40;;826:60;854:1;840:11;:15;826:60;;884:1;870:11;857:24;;:3;;:10;;:24;:28;826:3;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;:::i;:::-;816:70;;526:371;957:7;974:19;1018:44;1039:7;1048:8;1058:3;;1018:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:44::i;:::-;1003:59;;;;;;;;1132:2;:63;;;;;1157:38;1192:2;1176:6;:13;:18;1157:6;:18;;:38;;;;:::i;:::-;1138:57;;;:15;1148:4;;1138:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:15::i;:::-;:57;;;;1132:63;1125:70;;;;;;;284:918;;;;;;;;:::o;5330:122:0:-;5401:9;5435:4;5440:3;5435:9;;;;;;;;;;;;;;;;5429:16;;5422:23;;5330:122;;;;:::o;8682:393::-;8765:12;8813:4;:11;8806:3;8797:6;:12;:27;;8789:36;;;;;;8836:16;8865:3;8855:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:33;;8879:9;8898:8;8957:2;8952:3;8948:12;8940:20;;8999:6;8994:2;8988:4;8984:13;8980:26;8973:33;;9025:22;9032:4;9038:3;9043;9025:6;:22::i;:::-;9065:3;9058:10;;;;;8682:393;;;;;:::o;5696:223::-;5768:10;5809:4;:11;5804:1;5798:3;:7;:22;;5790:31;;;;;;5896:6;5889:3;5885:1;5879:4;5875:12;5871:22;5865:29;5861:42;5854:49;;5840:73;;;;:::o;377:167:13:-;468:4;474:12;505:32;529:1;532;535;505:23;:32::i;:::-;498:39;;;;377:167;;;;;;:::o;7040:287:0:-;7113:11;7156:4;:11;7150:2;7144:3;:8;:23;;7136:32;;;;;;7244:66;7237:3;7232:2;7226:4;7222:13;7218:23;7212:30;7208:103;7201:110;;7187:134;;;;:::o;74:5661:21:-;129:11;239:4;233:11;344:4;338:11;380:2;374:4;370:13;362:21;;500:2;479:18;475:1;470:3;466:11;462:36;458:45;546:1;540:3;530:8;526:18;523:25;566:1;561:40;;;;516:85;;561:40;596:2;586:8;582:17;570:29;;516:85;;624:50;688:425;;;;790:5;785:3;782:14;779:2;;;844:3;839;835:13;829:20;819:30;;890:3;883:5;879:15;870:24;;928:2;921:5;918:13;915:2;;;1004:1;995:5;991:2;987:14;982:3;978:24;974:32;970:37;1054:4;1046:6;1042:17;1032:27;;932:149;915:2;779;733:380;;;;;:::o;:::-;1142:1;1127:4284;1152:8;1149:1;1146:15;1127:4284;;;1216:22;1234:3;1231:1;1225:4;1216:22;:::i;:::-;1207:7;1200:39;1281:31;1308:3;1303:2;1300:1;1296:10;1290:4;1281:31;:::i;:::-;1276:2;1267:7;1263:16;1256:57;1427:2;1423:1;1418:3;1414:11;1411:19;1452:1;1447:51;;;;1404:94;;1447:51;1491:4;1486:1;1481:3;1477:11;1468:7;1464:25;1456:40;1404:94;;1606:2;1596:8;1592:17;1589:1;1586:24;1632:1;1627:77;;;;1579:125;;1627:77;1698:1;1693:3;1689:11;1683:2;1674:7;1670:16;1664:23;1661:40;1656:2;1647:7;1643:16;1636:66;1579:125;;1791:2;1776:512;1802:3;1799:1;1796:10;1776:512;;;1999:2;1996:1;1992:10;1983:7;1979:24;1973:31;1966:2;1963:1;1959:10;1950:7;1946:24;1940:31;1936:69;1928:2;1925:1;1921:10;1912:7;1908:24;1902:31;1895:2;1892:1;1888:10;1879:7;1875:24;1869:31;1865:69;1861:145;2152:66;2139:10;2133:4;2129:21;2125:94;2056:66;2052:1;2046:4;2042:12;2038:85;2035:185;2027:193;;2265:4;2261:1;2252:7;2248:15;2241:29;1827:461;1821:2;1818:1;1814:10;1809:15;;1776:512;;;1780:15;2320:3;2305:515;2332:3;2329:1;2326:10;2305:515;;;2530:3;2527:1;2523:11;2514:7;2510:25;2504:32;2496:3;2493:1;2489:11;2480:7;2476:25;2470:32;2466:71;2458:2;2455:1;2451:10;2442:7;2438:24;2432:31;2425:2;2422:1;2418:10;2409:7;2405:24;2399:31;2395:69;2391:147;2684:66;2671:10;2665:4;2661:21;2657:94;2588:66;2584:1;2578:4;2574:12;2570:85;2567:185;2559:193;;2797:4;2793:1;2784:7;2780:15;2773:29;2357:463;2351:2;2348:1;2344:10;2339:15;;2305:515;;;2309:16;2847:1;2874;2901;2934;2919:2389;2944:2;2941:1;2938:9;2919:2389;;;3003:2;3000:1;2996:10;3032:1;3027:352;;;;3405:1;3400:282;;;;3708:1;3703:414;;;;4143:1;4138:283;;;;2989:1432;;3027:352;3164:13;3161:1;3157:21;3131:23;3128:1;3124:31;3120:59;3115:64;;3256:1;3220:33;3217:1;3213:41;3209:49;3204:54;;3315:1;3299:13;3296:1;3292:21;3288:29;3283:34;;3347:10;3342:15;;3027:352;;3400:282;3536:23;3533:1;3529:31;3493:33;3490:1;3486:41;3482:79;3477:84;;3618:1;3602:13;3599:1;3595:21;3591:29;3586:34;;3650:10;3645:15;;3400:282;;3703:414;3855:23;3852:1;3848:31;3812:33;3809:1;3805:41;3802:78;3797:83;;3937:1;3921:13;3918:1;3914:21;3910:29;3905:34;;4053:1;4026:23;4023:1;4019:31;3983:33;3980:1;3976:41;3972:79;3969:86;3964:91;;4085:10;4080:15;;3703:414;;4138:283;4275:23;4272:1;4268:31;4232:33;4229:1;4225:41;4221:79;4216:84;;4357:1;4341:13;4338:1;4334:21;4330:29;4325:34;;4389:10;4384:15;;2989:1432;;4583:4;4531:49;4528:1;4524:57;4520:68;4688:4;4675:10;4631:41;4628:1;4624:49;4620:66;4617:76;4609:84;;4729:4;4726:1;4722:12;4714:20;;4787:4;4774:10;4771:1;4767:18;4763:29;4755:37;;4828:4;4825:1;4821:12;4813:20;;4964:4;4902:59;4896:1;4893;4889:9;4880:7;4876:23;4870:30;4866:96;4862:107;4854:115;;5031:43;5025:4;5021:54;5005:13;5002:1;4998:21;4995:81;4990:86;;5265:23;5251:10;5225:23;5222:1;5218:31;5214:48;5201:10;5183:15;5180:1;5176:23;5172:40;5169:94;5165:124;5112:50;5109:1;5105:58;5102:188;5097:193;;2967:2341;2962:1;2959;2955:9;2950:14;;2919:2389;;;2923:14;5346:50;5342:1;5339;5335:9;5331:66;5326:71;;1182:4229;;;1176:2;1173:1;1169:10;1164:15;;1127:4284;;;1131:14;5691:27;5677:10;5674:1;5670:18;5648;5640:5;5637:1;5633:13;5629:38;5599:26;5589:7;5586:1;5582:15;5578:48;5540:34;5528:9;5525:1;5521:17;5517:58;5472:42;5458:11;5455:1;5451:19;5447:68;5444:132;5441:186;5438:230;5435:254;5431:288;5424:295;;161:5568;;;;;;;:::o;7913:549:0:-;8033:165;8047:2;8040:3;:9;8033:165;;8122:3;8116:10;8110:4;8103:24;8162:2;8154:10;;;;8185:2;8178:9;;;;8058:2;8051:9;;;;8033:165;;;8240:9;8272:1;8265:3;8260:2;:8;8252:3;:17;:21;8240:33;;8341:4;8337:9;8331:3;8325:10;8321:26;8393:4;8386;8380:11;8376:22;8437:7;8427:8;8424:21;8418:4;8411:35;8292:164;;;;;;:::o;213:720:9:-;316:12;330:19;361:9;416:7;:14;398:8;:15;384:4;:11;374:6;373:22;:40;:57;361:69;;441:26;;:::i;:::-;477:16;488:4;477:5;:10;;:16;;;;:::i;:::-;;504:41;532:4;:11;524:20;;504:5;:19;;:41;;;;:::i;:::-;;555:45;583:8;:15;575:24;;555:5;:19;;:45;;;;:::i;:::-;;610:44;638:7;:14;630:23;;610:5;:19;;:44;;;;:::i;:::-;;664:18;677:4;664:5;:12;;:18;;;;:::i;:::-;;692:22;705:8;692:5;:12;;:22;;;;:::i;:::-;;724:21;737:7;724:5;:12;;:21;;;;:::i;:::-;;775:7;:14;765:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;756:34;;908:7;902:14;897:2;889:6;885:15;879:4;874:2;866:5;860:12;856:21;853:1;846:5;835:82;824:93;;810:117;;;;;;;;:::o;978:455:20:-;1048:13;;:::i;:::-;1094:1;1088:2;1077:8;:13;;;;;;:18;1073:81;;1140:2;1129:8;:13;;;;;;1123:2;:20;1111:32;;;;1073:81;1224:8;1209:3;:12;;:23;;;;;1282:4;1276:11;1312:3;1307;1300:16;1341:1;1336:3;1329:14;1386:8;1381:3;1377:18;1373:2;1369:27;1363:4;1356:41;1251:156;1423:3;1416:10;;978:455;;;;:::o;8882:154::-;8961:13;;:::i;:::-;8993:36;8999:3;9004;:7;;;:14;9020:4;9026:2;8993:5;:36::i;:::-;8986:43;;8882:154;;;;:::o;4946:161::-;5023:13;;:::i;:::-;5055:45;5061:3;5066;:7;;;:14;5082:4;5088;:11;5055:5;:45::i;:::-;5048:52;;4946:161;;;;:::o;6920:799::-;7009:13;;:::i;:::-;7050:3;:12;;;7044:3;7038;:9;:24;7034:83;;;7078:28;7085:3;7104:1;7097:3;7091;:9;7090:15;7078:6;:28::i;:::-;7034:83;7127:9;7152:1;7146:3;7139;:10;:14;7127:26;;7217:3;7212:2;:8;7207:1;:14;7198:4;:24;;7191:31;;7324:3;7318:10;7451:3;7445;7437:6;7433:16;7429:26;7513:4;7505;7501:9;7494:4;7488:11;7484:27;7481:37;7475:4;7468:51;7613:6;7607:13;7601:3;7596;7592:13;7589:32;7586:2;;;7664:3;7659;7655:13;7647:6;7640:29;7586:2;7241:452;;7709:3;7702:10;;;6920:799;;;;;;:::o;2875:1326::-;2970:13;;:::i;:::-;3010:4;:11;3003:3;:18;;2995:27;;;;;;3049:3;:12;;;3043:3;3037;:9;:24;3033:100;;;3077:45;3084:3;3120:1;3089:28;3093:3;:12;;;3113:3;3107;:9;3089:3;:28::i;:::-;:32;3077:6;:45::i;:::-;3033:100;3143:9;3162:8;3272:3;3266:10;3355:6;3349:13;3483:3;3478:2;3470:6;3466:15;3462:25;3454:33;;3579:6;3573:3;3568;3564:13;3561:25;3558:2;;;3629:3;3624;3620:13;3612:6;3605:29;3558:2;3678;3672:4;3668:13;3661:20;;3189:502;;3751:165;3765:2;3758:3;:9;3751:165;;3840:3;3834:10;3828:4;3821:24;3880:2;3872:10;;;;3903:2;3896:9;;;;3776:2;3769:9;;;;3751:165;;;3958:9;3990:1;3983:3;3978:2;:8;3970:3;:17;:21;3958:33;;4059:4;4055:9;4049:3;4043:10;4039:26;4111:4;4104;4098:11;4094:22;4155:7;4145:8;4142:21;4136:4;4129:35;4010:164;;4191:3;4184:10;;;;;2875:1326;;;;;;:::o;1862:167::-;1935:19;1957:3;:7;;;1935:29;;1974:19;1979:3;1984:8;1974:4;:19::i;:::-;;2003;2010:3;2015:6;2003;:19::i;:::-;;1862:167;;;:::o;2035:134::-;2085:4;2109:1;2105;:5;2101:44;;;2133:1;2126:8;;;;2101:44;2161:1;2154:8;;2035:134;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.7.4;\n\nimport \"./Algorithm.sol\";\nimport \"../BytesUtils.sol\";\nimport \"./RSAVerify.sol\";\nimport \"@ensdomains/solsha1/contracts/SHA1.sol\";\n\n/**\n* @dev Implements the DNSSEC RSASHA1 algorithm.\n*/\ncontract RSASHA1Algorithm is Algorithm {\n    using BytesUtils for *;\n\n    function verify(bytes calldata key, bytes calldata data, bytes calldata sig) external override view returns (bool) {\n        bytes memory exponent;\n        bytes memory modulus;\n\n        uint16 exponentLen = uint16(key.readUint8(4));\n        if (exponentLen != 0) {\n            exponent = key.substring(5, exponentLen);\n            modulus = key.substring(exponentLen + 5, key.length - exponentLen - 5);\n        } else {\n            exponentLen = key.readUint16(5);\n            exponent = key.substring(7, exponentLen);\n            modulus = key.substring(exponentLen + 7, key.length - exponentLen - 7);\n        }\n\n        // Recover the message from the signature\n        bool ok;\n        bytes memory result;\n        (ok, result) = RSAVerify.rsarecover(modulus, exponent, sig);\n\n        // Verify it ends with the hash of our data\n        return ok && SHA1.sha1(data) == result.readBytes20(result.length - 20);\n    }\n}\n",
  "sourcePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSASHA1Algorithm.sol",
  "ast": {
    "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSASHA1Algorithm.sol",
    "exportedSymbols": {
      "Algorithm": [
        3863
      ],
      "Buffer": [
        6432
      ],
      "BytesUtils": [
        730
      ],
      "ModexpPrecompile": [
        5348
      ],
      "RSASHA1Algorithm": [
        5570
      ],
      "RSAVerify": [
        5727
      ],
      "SHA1": [
        6448
      ]
    },
    "id": 5571,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5440,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol",
        "file": "./Algorithm.sol",
        "id": 5441,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 3864,
        "src": "25:25:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol",
        "file": "../BytesUtils.sol",
        "id": 5442,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 731,
        "src": "51:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSAVerify.sol",
        "file": "./RSAVerify.sol",
        "id": 5443,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 5728,
        "src": "79:25:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/solsha1/contracts/SHA1.sol",
        "file": "@ensdomains/solsha1/contracts/SHA1.sol",
        "id": 5444,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 6449,
        "src": "105:48:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 5446,
              "name": "Algorithm",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3863,
              "src": "239:9:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Algorithm_$3863",
                "typeString": "contract Algorithm"
              }
            },
            "id": 5447,
            "nodeType": "InheritanceSpecifier",
            "src": "239:9:11"
          }
        ],
        "contractDependencies": [
          3863
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 5445,
          "nodeType": "StructuredDocumentation",
          "src": "155:54:11",
          "text": " @dev Implements the DNSSEC RSASHA1 algorithm."
        },
        "fullyImplemented": true,
        "id": 5570,
        "linearizedBaseContracts": [
          5570,
          3863
        ],
        "name": "RSASHA1Algorithm",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5449,
            "libraryName": {
              "id": 5448,
              "name": "BytesUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 730,
              "src": "261:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesUtils_$730",
                "typeString": "library BytesUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "255:23:11"
          },
          {
            "baseFunctions": [
              3862
            ],
            "body": {
              "id": 5568,
              "nodeType": "Block",
              "src": "399:803:11",
              "statements": [
                {
                  "assignments": [
                    5462
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5462,
                      "mutability": "mutable",
                      "name": "exponent",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "409:21:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5461,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "409:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5463,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "409:21:11"
                },
                {
                  "assignments": [
                    5465
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5465,
                      "mutability": "mutable",
                      "name": "modulus",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "440:20:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5464,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "440:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5466,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "440:20:11"
                },
                {
                  "assignments": [
                    5468
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5468,
                      "mutability": "mutable",
                      "name": "exponentLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "471:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 5467,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "471:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5476,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "34",
                            "id": 5473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "513:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            }
                          ],
                          "expression": {
                            "id": 5471,
                            "name": "key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5451,
                            "src": "499:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 5472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readUint8",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 311,
                          "src": "499:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                          }
                        },
                        "id": 5474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "499:16:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 5470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "492:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 5469,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "492:6:11",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "492:24:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "471:45:11"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 5479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5477,
                      "name": "exponentLen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "530:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "545:1:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "530:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5534,
                    "nodeType": "Block",
                    "src": "703:194:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 5509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5504,
                            "name": "exponentLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5468,
                            "src": "717:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "35",
                                "id": 5507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "746:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                "value": "5"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                }
                              ],
                              "expression": {
                                "id": 5505,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "731:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "readUint16",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 331,
                              "src": "731:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                              }
                            },
                            "id": 5508,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "731:17:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "717:31:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 5510,
                        "nodeType": "ExpressionStatement",
                        "src": "717:31:11"
                      },
                      {
                        "expression": {
                          "id": 5517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5511,
                            "name": "exponent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5462,
                            "src": "762:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "37",
                                "id": 5514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "787:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_7_by_1",
                                  "typeString": "int_const 7"
                                },
                                "value": "7"
                              },
                              {
                                "id": 5515,
                                "name": "exponentLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5468,
                                "src": "790:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_7_by_1",
                                  "typeString": "int_const 7"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 5512,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "773:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "773:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "773:29:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "762:40:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5518,
                        "nodeType": "ExpressionStatement",
                        "src": "762:40:11"
                      },
                      {
                        "expression": {
                          "id": 5532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5519,
                            "name": "modulus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5465,
                            "src": "816:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                "id": 5524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5522,
                                  "name": "exponentLen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5468,
                                  "src": "840:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "37",
                                  "id": 5523,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "854:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "7"
                                },
                                "src": "840:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 5525,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5451,
                                      "src": "857:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 5526,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "857:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5527,
                                    "name": "exponentLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5468,
                                    "src": "870:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "src": "857:24:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "37",
                                  "id": 5529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "884:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "7"
                                },
                                "src": "857:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5520,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "826:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "826:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "826:60:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "816:70:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5533,
                        "nodeType": "ExpressionStatement",
                        "src": "816:70:11"
                      }
                    ]
                  },
                  "id": 5535,
                  "nodeType": "IfStatement",
                  "src": "526:371:11",
                  "trueBody": {
                    "id": 5503,
                    "nodeType": "Block",
                    "src": "548:149:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 5486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5480,
                            "name": "exponent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5462,
                            "src": "562:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "35",
                                "id": 5483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "587:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                "value": "5"
                              },
                              {
                                "id": 5484,
                                "name": "exponentLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5468,
                                "src": "590:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 5481,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "573:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "573:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "573:29:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "562:40:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5487,
                        "nodeType": "ExpressionStatement",
                        "src": "562:40:11"
                      },
                      {
                        "expression": {
                          "id": 5501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5488,
                            "name": "modulus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5465,
                            "src": "616:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                "id": 5493,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5491,
                                  "name": "exponentLen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5468,
                                  "src": "640:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "35",
                                  "id": 5492,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "654:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "src": "640:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 5494,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5451,
                                      "src": "657:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 5495,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "657:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5496,
                                    "name": "exponentLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5468,
                                    "src": "670:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "src": "657:24:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "35",
                                  "id": 5498,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "684:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "src": "657:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5489,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "626:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "626:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "626:60:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "616:70:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5502,
                        "nodeType": "ExpressionStatement",
                        "src": "616:70:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5537,
                      "mutability": "mutable",
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "957:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5536,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "957:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5538,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "957:7:11"
                },
                {
                  "assignments": [
                    5540
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5540,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "974:19:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5539,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "974:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5541,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "974:19:11"
                },
                {
                  "expression": {
                    "id": 5551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 5542,
                          "name": "ok",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5537,
                          "src": "1004:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "id": 5543,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5540,
                          "src": "1008:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 5544,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1003:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5547,
                          "name": "modulus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5465,
                          "src": "1039:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 5548,
                          "name": "exponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5462,
                          "src": "1048:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 5549,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5455,
                          "src": "1058:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "id": 5545,
                          "name": "RSAVerify",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5727,
                          "src": "1018:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_RSAVerify_$5727_$",
                            "typeString": "type(library RSAVerify)"
                          }
                        },
                        "id": 5546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rsarecover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5726,
                        "src": "1018:20:11",
                        "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": 5550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1018:44:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "1003:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5552,
                  "nodeType": "ExpressionStatement",
                  "src": "1003:59:11"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5553,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5537,
                      "src": "1132:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "id": 5565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 5556,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5453,
                            "src": "1148:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 5554,
                            "name": "SHA1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6448,
                            "src": "1138:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SHA1_$6448_$",
                              "typeString": "type(library SHA1)"
                            }
                          },
                          "id": 5555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sha1",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6447,
                          "src": "1138:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                            "typeString": "function (bytes memory) pure returns (bytes20)"
                          }
                        },
                        "id": 5557,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1138:15:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 5560,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5540,
                                "src": "1176:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5561,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "1176:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "3230",
                              "id": 5562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1192:2:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_20_by_1",
                                "typeString": "int_const 20"
                              },
                              "value": "20"
                            },
                            "src": "1176:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5558,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5540,
                            "src": "1157:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 5559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readBytes20",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 391,
                          "src": "1157:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes20_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (bytes20)"
                          }
                        },
                        "id": 5564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1157:38:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "src": "1138:57:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1132:63:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5460,
                  "id": 5567,
                  "nodeType": "Return",
                  "src": "1125:70:11"
                }
              ]
            },
            "functionSelector": "de8f50a1",
            "id": 5569,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5457,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "370:8:11"
            },
            "parameters": {
              "id": 5456,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5451,
                  "mutability": "mutable",
                  "name": "key",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "300:18:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5450,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5453,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "320:19:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5452,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "320:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5455,
                  "mutability": "mutable",
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "341:18:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5454,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "341:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "299:61:11"
            },
            "returnParameters": {
              "id": 5460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5459,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "393:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5458,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "392:6:11"
            },
            "scope": 5570,
            "src": "284:918:11",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5571,
        "src": "210:994:11"
      }
    ],
    "src": "0:1205:11"
  },
  "legacyAST": {
    "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSASHA1Algorithm.sol",
    "exportedSymbols": {
      "Algorithm": [
        3863
      ],
      "Buffer": [
        6432
      ],
      "BytesUtils": [
        730
      ],
      "ModexpPrecompile": [
        5348
      ],
      "RSASHA1Algorithm": [
        5570
      ],
      "RSAVerify": [
        5727
      ],
      "SHA1": [
        6448
      ]
    },
    "id": 5571,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5440,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/Algorithm.sol",
        "file": "./Algorithm.sol",
        "id": 5441,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 3864,
        "src": "25:25:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/BytesUtils.sol",
        "file": "../BytesUtils.sol",
        "id": 5442,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 731,
        "src": "51:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/enssec/contracts/algorithms/RSAVerify.sol",
        "file": "./RSAVerify.sol",
        "id": 5443,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 5728,
        "src": "79:25:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/solsha1/contracts/SHA1.sol",
        "file": "@ensdomains/solsha1/contracts/SHA1.sol",
        "id": 5444,
        "nodeType": "ImportDirective",
        "scope": 5571,
        "sourceUnit": 6449,
        "src": "105:48:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 5446,
              "name": "Algorithm",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3863,
              "src": "239:9:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Algorithm_$3863",
                "typeString": "contract Algorithm"
              }
            },
            "id": 5447,
            "nodeType": "InheritanceSpecifier",
            "src": "239:9:11"
          }
        ],
        "contractDependencies": [
          3863
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 5445,
          "nodeType": "StructuredDocumentation",
          "src": "155:54:11",
          "text": " @dev Implements the DNSSEC RSASHA1 algorithm."
        },
        "fullyImplemented": true,
        "id": 5570,
        "linearizedBaseContracts": [
          5570,
          3863
        ],
        "name": "RSASHA1Algorithm",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5449,
            "libraryName": {
              "id": 5448,
              "name": "BytesUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 730,
              "src": "261:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesUtils_$730",
                "typeString": "library BytesUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "255:23:11"
          },
          {
            "baseFunctions": [
              3862
            ],
            "body": {
              "id": 5568,
              "nodeType": "Block",
              "src": "399:803:11",
              "statements": [
                {
                  "assignments": [
                    5462
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5462,
                      "mutability": "mutable",
                      "name": "exponent",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "409:21:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5461,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "409:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5463,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "409:21:11"
                },
                {
                  "assignments": [
                    5465
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5465,
                      "mutability": "mutable",
                      "name": "modulus",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "440:20:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5464,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "440:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5466,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "440:20:11"
                },
                {
                  "assignments": [
                    5468
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5468,
                      "mutability": "mutable",
                      "name": "exponentLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "471:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 5467,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "471:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5476,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "34",
                            "id": 5473,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "513:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            }
                          ],
                          "expression": {
                            "id": 5471,
                            "name": "key",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5451,
                            "src": "499:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 5472,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readUint8",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 311,
                          "src": "499:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                          }
                        },
                        "id": 5474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "499:16:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 5470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "492:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 5469,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "492:6:11",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "492:24:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "471:45:11"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 5479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5477,
                      "name": "exponentLen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "530:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "545:1:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "530:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5534,
                    "nodeType": "Block",
                    "src": "703:194:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 5509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5504,
                            "name": "exponentLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5468,
                            "src": "717:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "35",
                                "id": 5507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "746:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                "value": "5"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                }
                              ],
                              "expression": {
                                "id": 5505,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "731:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "readUint16",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 331,
                              "src": "731:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint16_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256) pure returns (uint16)"
                              }
                            },
                            "id": 5508,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "731:17:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "717:31:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 5510,
                        "nodeType": "ExpressionStatement",
                        "src": "717:31:11"
                      },
                      {
                        "expression": {
                          "id": 5517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5511,
                            "name": "exponent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5462,
                            "src": "762:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "37",
                                "id": 5514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "787:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_7_by_1",
                                  "typeString": "int_const 7"
                                },
                                "value": "7"
                              },
                              {
                                "id": 5515,
                                "name": "exponentLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5468,
                                "src": "790:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_7_by_1",
                                  "typeString": "int_const 7"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 5512,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "773:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "773:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "773:29:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "762:40:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5518,
                        "nodeType": "ExpressionStatement",
                        "src": "762:40:11"
                      },
                      {
                        "expression": {
                          "id": 5532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5519,
                            "name": "modulus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5465,
                            "src": "816:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                "id": 5524,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5522,
                                  "name": "exponentLen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5468,
                                  "src": "840:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "37",
                                  "id": 5523,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "854:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "7"
                                },
                                "src": "840:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5530,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 5525,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5451,
                                      "src": "857:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 5526,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "857:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5527,
                                    "name": "exponentLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5468,
                                    "src": "870:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "src": "857:24:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "37",
                                  "id": 5529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "884:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "7"
                                },
                                "src": "857:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5520,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "826:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "826:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "826:60:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "816:70:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5533,
                        "nodeType": "ExpressionStatement",
                        "src": "816:70:11"
                      }
                    ]
                  },
                  "id": 5535,
                  "nodeType": "IfStatement",
                  "src": "526:371:11",
                  "trueBody": {
                    "id": 5503,
                    "nodeType": "Block",
                    "src": "548:149:11",
                    "statements": [
                      {
                        "expression": {
                          "id": 5486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5480,
                            "name": "exponent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5462,
                            "src": "562:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "35",
                                "id": 5483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "587:1:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                "value": "5"
                              },
                              {
                                "id": 5484,
                                "name": "exponentLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5468,
                                "src": "590:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_5_by_1",
                                  "typeString": "int_const 5"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "expression": {
                                "id": 5481,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "573:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "573:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "573:29:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "562:40:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5487,
                        "nodeType": "ExpressionStatement",
                        "src": "562:40:11"
                      },
                      {
                        "expression": {
                          "id": 5501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5488,
                            "name": "modulus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5465,
                            "src": "616:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                "id": 5493,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5491,
                                  "name": "exponentLen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5468,
                                  "src": "640:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "35",
                                  "id": 5492,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "654:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "src": "640:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 5494,
                                      "name": "key",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5451,
                                      "src": "657:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes calldata"
                                      }
                                    },
                                    "id": 5495,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "657:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5496,
                                    "name": "exponentLen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5468,
                                    "src": "670:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "src": "657:24:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "35",
                                  "id": 5498,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "684:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "src": "657:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 5489,
                                "name": "key",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "626:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              },
                              "id": 5490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "substring",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 502,
                              "src": "626:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                              }
                            },
                            "id": 5500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "626:60:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "616:70:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 5502,
                        "nodeType": "ExpressionStatement",
                        "src": "616:70:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5537
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5537,
                      "mutability": "mutable",
                      "name": "ok",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "957:7:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5536,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "957:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5538,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "957:7:11"
                },
                {
                  "assignments": [
                    5540
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5540,
                      "mutability": "mutable",
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 5568,
                      "src": "974:19:11",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5539,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "974:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5541,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "974:19:11"
                },
                {
                  "expression": {
                    "id": 5551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 5542,
                          "name": "ok",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5537,
                          "src": "1004:2:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "id": 5543,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5540,
                          "src": "1008:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 5544,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1003:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 5547,
                          "name": "modulus",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5465,
                          "src": "1039:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 5548,
                          "name": "exponent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5462,
                          "src": "1048:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 5549,
                          "name": "sig",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5455,
                          "src": "1058:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "id": 5545,
                          "name": "RSAVerify",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5727,
                          "src": "1018:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_RSAVerify_$5727_$",
                            "typeString": "type(library RSAVerify)"
                          }
                        },
                        "id": 5546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "rsarecover",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5726,
                        "src": "1018:20:11",
                        "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": 5550,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1018:44:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "1003:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5552,
                  "nodeType": "ExpressionStatement",
                  "src": "1003:59:11"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5553,
                      "name": "ok",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5537,
                      "src": "1132:2:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "id": 5565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 5556,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5453,
                            "src": "1148:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 5554,
                            "name": "SHA1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6448,
                            "src": "1138:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SHA1_$6448_$",
                              "typeString": "type(library SHA1)"
                            }
                          },
                          "id": 5555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sha1",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6447,
                          "src": "1138:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                            "typeString": "function (bytes memory) pure returns (bytes20)"
                          }
                        },
                        "id": 5557,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1138:15:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 5560,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5540,
                                "src": "1176:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5561,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "1176:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "3230",
                              "id": 5562,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1192:2:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_20_by_1",
                                "typeString": "int_const 20"
                              },
                              "value": "20"
                            },
                            "src": "1176:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5558,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5540,
                            "src": "1157:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 5559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "readBytes20",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 391,
                          "src": "1157:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes20_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint256) pure returns (bytes20)"
                          }
                        },
                        "id": 5564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1157:38:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "src": "1138:57:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1132:63:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5460,
                  "id": 5567,
                  "nodeType": "Return",
                  "src": "1125:70:11"
                }
              ]
            },
            "functionSelector": "de8f50a1",
            "id": 5569,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5457,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "370:8:11"
            },
            "parameters": {
              "id": 5456,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5451,
                  "mutability": "mutable",
                  "name": "key",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "300:18:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5450,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5453,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "320:19:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5452,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "320:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5455,
                  "mutability": "mutable",
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "341:18:11",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5454,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "341:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "299:61:11"
            },
            "returnParameters": {
              "id": 5460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5459,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5569,
                  "src": "393:4:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5458,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "393:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "392:6:11"
            },
            "scope": 5570,
            "src": "284:918:11",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5571,
        "src": "210:994:11"
      }
    ],
    "src": "0:1205:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.2",
  "updatedAt": "2021-01-20T20:53:41.257Z",
  "devdoc": {
    "details": "Implements the DNSSEC RSASHA1 algorithm.",
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}