Commit 67dc5654 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): In-order restriction in `addLeavesLPP` (#9134)

* Large preimage proposal - restriction on submitting data in-order

* Challenger updates

* op-challenger: Update tx data decoding for new ABI

---------
Co-authored-by: default avatarAdrian Sutton <adrian@oplabs.co>
parent 2ca70b4e
...@@ -31,7 +31,7 @@ var ( ...@@ -31,7 +31,7 @@ var (
// AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract. // AlphabetVMMetaData contains all meta data concerning the AlphabetVM contract.
var AlphabetVMMetaData = &bind.MetaData{ var AlphabetVMMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPreimageOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"postState_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"}]", ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_absolutePrestate\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPreimageOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"step\",\"inputs\":[{\"name\":\"_stateData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"postState_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"}]",
Bin: "0x60a060405234801561001057600080fd5b5060405161386038038061386083398101604081905261002f916100a0565b6080819052604051600090819061004590610093565b9182526020820152604001604051809103906000f08015801561006c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100b9565b613289806105d783390190565b6000602082840312156100b257600080fd5b5051919050565b6080516105046100d3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60c06040523480156200001157600080fd5b5060405162003289380380620032898339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a0516130c0620001c9600039600081816103db015261184201526000818161044f01526110ef01526130c06000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80639d53a6481461032b5780639f99ef821461036d578063b2e67ba81461038057600080fd5b806361238bde116101505780638542cf501161012a5780638542cf50146102ae578063882856ef146102ec5780638dc4be111461031857600080fd5b806361238bde146102455780636551927b146102705780637ac547671461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b636600461270e565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa366004612750565b6104eb565b6040519081526020016101e3565b6101ff601081565b61022861022336600461294b565b610623565b005b6101ff610871565b6101ff610240366004612a37565b61088c565b6101ff610253366004612a72565b600160209081526000928352604080842090915290825290205481565b6101ff61027e366004612750565b601560209081526000928352604080842090915290825290205481565b6101ff6102a936600461270e565b610961565b6102dc6102bc366004612a72565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b6102ff6102fa366004612a94565b610978565b60405167ffffffffffffffff90911681526020016101e3565b610228610326366004612b09565b6109d2565b6101ff610339366004612750565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b61022861037b366004612b55565b610acd565b6101ff61038e366004612750565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612a94565b611048565b6102286103cc36600461294b565b61107a565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612a72565b611445565b604080519283526020830191909152016101e3565b610228610435366004612b09565b611536565b610228610448366004612be6565b61163e565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612c7f565b6117b8565b6101ff61049436600461270e565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612cbb565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612cbb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d19565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612d51565b6119cb565b611a0b565b80156106705750610670838383602088013561064d6106488a612d51565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e20565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612e5e565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612e76565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6c92505050565b6107a788611bc7565b8360400135886040516020016107bd9190612e20565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002612ffd565b6108899190613009565b81565b60006108988686612463565b90506108a5836008612e5e565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061097157600080fd5b0154905081565b601760205282600052604060002060205281600052604060002081815481106109a057600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106109f05763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610a1d57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b333214610b06576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608115610b1f57610b188686612510565b9050610b59565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b815481526020019060010190808311610b865750503360009081526015602090815260408083208f8452909152902054939450610bc892508391506125999050565b63ffffffff16600003610c07576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c118160c01c90565b67ffffffffffffffff1615610c52576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c648260a01c63ffffffff1690565b67ffffffffffffffff1690506000610c828360401c63ffffffff1690565b63ffffffff169050600882108015610c98575080155b15610d1f576000610caf8460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610dd4565b60088210158015610d3d575080610d37600884613009565b92508210155b8015610d515750610d4e8982612e5e565b82105b15610dd4576000610d628284613009565b905089610d70826020612e5e565b10158015610d7c575086155b15610db3576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610de68460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610e13576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610ec3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610eb8576001821615610e985782818d0152610eb8565b8b81015160009081526020938452604090209260019290921c9101610e7b565b505050608801610e20565b50505050600160106002610ed79190612ffd565b610ee19190613009565b811115610f1a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610f4090866010612684565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610ff4610fa2838c612e5e565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b9350861561101f5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b6014602052826000526040600020602052816000526040600020816010811061107057600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156110ed576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006111188260c01c90565b61112c9067ffffffffffffffff1642613009565b11611163576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061116f8b8b6104eb565b905061118887878360208c013561064d6106488e612d51565b80156111a657506111a6848483602089013561064d6106488b612d51565b6111dc576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111f29190612e20565b604051602081830303815290604052805190602001201461123f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016112559190612e5e565b1415806112875750600161126f8360601c63ffffffff1690565b6112799190613020565b63ffffffff16856020013514155b156112be576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112d08360801c63ffffffff1690565b63ffffffff169050806112e98460401c63ffffffff1690565b63ffffffff1614611326576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113348a6107648880612e76565b61133d8a611bc7565b60006113488b6125a5565b9050600061135c8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546114ea816008612e5e565b6114f5856020612e5e565b106115135783611506826008612e5e565b6115109190613009565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106115545763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061164a86866104eb565b9050611663838383602088013561064d6106488a612d51565b611699576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156116d5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd6126c2565b6116eb816107648780612e76565b6116f481611bc7565b84604001358160405160200161170a9190612e20565b6040516020818303038152906040528051906020012003611757576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146117f1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fc816008613045565b63ffffffff168263ffffffff1610611840576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156118a0576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b60008160000151826020015183604001516040516020016119ee9392919061306d565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611a5f578060051b880135600186831c1660018114611a445760008481526020839052604090209350611a55565b600082815260208590526040902093505b5050600101611a11565b5090931495945050505050565b6088815114611a7a57600080fd5b6020810160208301611afb565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611af581611ae0868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611b0760008383611a87565b611b1360018383611a87565b611b1f60028383611a87565b611b2b60038383611a87565b611b3760048383611a87565b611b4360058383611a87565b611b4f60068383611a87565b611b5b60078383611a87565b611b6760088383611a87565b611b7360098383611a87565b611b7f600a8383611a87565b611b8b600b8383611a87565b611b97600c8383611a87565b611ba3600d8383611a87565b611baf600e8383611a87565b611bbb600f8383611a87565b611af560108383611a87565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612343565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611d7a8660011b67ffffffffffffffff1690565b18188584603f1c611d958660011b67ffffffffffffffff1690565b18188584603f1c611db08660011b67ffffffffffffffff1690565b181895508483603f1c611dcd8560011b67ffffffffffffffff1690565b181894508387603f1c611dea8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61216a81611cbd565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611af5565b61234f60008284612161565b61235b60018284612161565b61236760028284612161565b61237360038284612161565b61237f60048284612161565b61238b60058284612161565b61239760068284612161565b6123a360078284612161565b6123af60088284612161565b6123bb60098284612161565b6123c7600a8284612161565b6123d3600b8284612161565b6123df600c8284612161565b6123eb600d8284612161565b6123f7600e8284612161565b612403600f8284612161565b61240f60108284612161565b61241b60118284612161565b61242760128284612161565b61243360138284612161565b61243f60148284612161565b61244b60158284612161565b61245760168284612161565b611af560178284612161565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612509818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561256e576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612580565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b6000612628565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006125d68360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006126038360101b67ffffffffffffffff1690565b1617905060008160201c6126218360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612640906125ac565b6125ac565b604082015161264e906125ac565b60401b1761266661263b60018460059190911b015190565b825160809190911b90612678906125ac565b60c01b17179392505050565b82601081019282156126b2579160200282015b828111156126b2578251825591602001919060010190612697565b506126be9291506126da565b5090565b60405180602001604052806126d56126ef565b905290565b5b808211156126be57600081556001016126db565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561272057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461274b57600080fd5b919050565b6000806040838503121561276357600080fd5b61276c83612727565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156127cd576127cd61277a565b60405290565b6040516060810167ffffffffffffffff811182821017156127cd576127cd61277a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561283d5761283d61277a565b604052919050565b600061032080838503121561285957600080fd5b604051602080820167ffffffffffffffff838210818311171561287e5761287e61277a565b8160405283955087601f88011261289457600080fd5b61289c6127a9565b94870194915081888611156128b057600080fd5b875b868110156128d857803583811681146128cb5760008081fd5b84529284019284016128b2565b50909352509295945050505050565b6000606082840312156128f957600080fd5b50919050565b60008083601f84011261291157600080fd5b50813567ffffffffffffffff81111561292957600080fd5b6020830191508360208260051b850101111561294457600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561296a57600080fd5b6129738a612727565b985060208a013597506129898b60408c01612845565b96506103608a013567ffffffffffffffff808211156129a757600080fd5b6129b38d838e016128e7565b97506103808c01359150808211156129ca57600080fd5b6129d68d838e016128ff565b90975095506103a08c01359150808211156129f057600080fd5b6129fc8d838e016128e7565b94506103c08c0135915080821115612a1357600080fd5b50612a208c828d016128ff565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a4f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612a8557600080fd5b50508035926020909101359150565b600080600060608486031215612aa957600080fd5b612ab284612727565b95602085013595506040909401359392505050565b60008083601f840112612ad957600080fd5b50813567ffffffffffffffff811115612af157600080fd5b60208301915083602082850101111561294457600080fd5b600080600060408486031215612b1e57600080fd5b83359250602084013567ffffffffffffffff811115612b3c57600080fd5b612b4886828701612ac7565b9497909650939450505050565b60008060008060008060808789031215612b6e57600080fd5b86359550602087013567ffffffffffffffff80821115612b8d57600080fd5b612b998a838b01612ac7565b90975095506040890135915080821115612bb257600080fd5b50612bbf89828a016128ff565b90945092505060608701358015158114612bd857600080fd5b809150509295509295509295565b600080600080600060808688031215612bfe57600080fd5b612c0786612727565b945060208601359350604086013567ffffffffffffffff80821115612c2b57600080fd5b612c3789838a016128e7565b94506060880135915080821115612c4d57600080fd5b50612c5a888289016128ff565b969995985093965092949392505050565b803563ffffffff8116811461274b57600080fd5b600080600060608486031215612c9457600080fd5b83359250612ca460208501612c6b565b9150612cb260408501612c6b565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d4a57612d4a612cea565b5060010190565b600060608236031215612d6357600080fd5b612d6b6127d3565b823567ffffffffffffffff80821115612d8357600080fd5b9084019036601f830112612d9657600080fd5b8135602082821115612daa57612daa61277a565b612dda817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016127f6565b92508183523681838601011115612df057600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612e5557825167ffffffffffffffff16825260209283019290910190600101612e2c565b50505092915050565b60008219821115612e7157612e71612cea565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612eab57600080fd5b83018035915067ffffffffffffffff821115612ec657600080fd5b60200191503681900382131561294457600080fd5b600181815b80851115612f3457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f1a57612f1a612cea565b80851615612f2757918102915b93841c9390800290612ee0565b509250929050565b600082612f4b57506001612ff7565b81612f5857506000612ff7565b8160018114612f6e5760028114612f7857612f94565b6001915050612ff7565b60ff841115612f8957612f89612cea565b50506001821b612ff7565b5060208310610133831016604e8410600b8410161715612fb7575081810a612ff7565b612fc18383612edb565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612ff357612ff3612cea565b0290505b92915050565b60006125098383612f3c565b60008282101561301b5761301b612cea565b500390565b600063ffffffff8381169083168181101561303d5761303d612cea565b039392505050565b600063ffffffff80831681851680830382111561306457613064612cea565b01949350505050565b6000845160005b8181101561308e5760208188018101518583015201613074565b8181111561309d576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a", Bin: "0x60a060405234801561001057600080fd5b506040516138c53803806138c583398101604081905261002f916100a0565b6080819052604051600090819061004590610093565b9182526020820152604001604051809103906000f08015801561006c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055506100b9565b6132ee806105d783390190565b6000602082840312156100b257600080fd5b5051919050565b6080516105046100d3600039600060af01526105046000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637dc0d1d01461003b578063e14ced3214610085575b600080fd5b60005461005b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610098610093366004610395565b6100a6565b60405190815260200161007c565b600080600060087f0000000000000000000000000000000000000000000000000000000000000000901b600889896040516100e2929190610409565b6040518091039020901b036101d9576000805473ffffffffffffffffffffffffffffffffffffffff1663e03110e161011b60048861029f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152600060248201526044016040805180830381865afa158015610175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101999190610419565b50640ffffffff0607c82901c169350905063ffffffff608082901c1660006101c38a8c018c61043d565b90506101cf8582610485565b9350505050610206565b6101e58789018961049d565b9092509050816101f4816104bf565b9250508080610202906104bf565b9150505b6040805160208101849052908101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001798975050505050505050565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617610345818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b60008083601f84011261035e57600080fd5b50813567ffffffffffffffff81111561037657600080fd5b60208301915083602082850101111561038e57600080fd5b9250929050565b6000806000806000606086880312156103ad57600080fd5b853567ffffffffffffffff808211156103c557600080fd5b6103d189838a0161034c565b909750955060208801359150808211156103ea57600080fd5b506103f78882890161034c565b96999598509660400135949350505050565b8183823760009101908152919050565b6000806040838503121561042c57600080fd5b505080516020909101519092909150565b60006020828403121561044f57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561049857610498610456565b500190565b600080604083850312156104b057600080fd5b50508035926020909101359150565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036104f0576104f0610456565b506001019056fea164736f6c634300080f000a60c06040523480156200001157600080fd5b50604051620032ee380380620032ee8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613125620001c9600039600081816103db015261175501526000818161044f015261100201526131256000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612768565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa3660046127aa565b6104eb565b6040519081526020016101e3565b6101ff601081565b6102286102233660046129a5565b610623565b005b6101ff610871565b6101ff610240366004612a91565b61088c565b6101ff610253366004612acc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e3660046127aa565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b30565b610961565b6101ff6102bc366004612768565b610def565b6102ef6102cf366004612acc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bcc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bff565b610e60565b6101ff61034c3660046127aa565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e3660046127aa565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bcc565b610f5b565b6102286103cc3660046129a5565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612acc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bff565b611449565b610228610448366004612c4b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612ce4565b6116cb565b6101ff610494366004612768565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d20565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d20565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d7e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612db6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612db6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e85565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612ec3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612edb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e85565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613062565b610889919061306e565b81565b60006108988686612376565b90506108a5836008612ec3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d88866124ac565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613062565b610c76919061306e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612ec3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126de565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261306e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612db6565b80156110b957506110b9848483602089013561064d6106488b612db6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e85565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612ec3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613085565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612edb565b6112508a611ada565b600061125b8b6125ff565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612ec3565b611408856020612ec3565b106114265783611419826008612ec3565b611423919061306e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612db6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061271c565b6115fe816107648780612edb565b61160781611ada565b84604001358160405160200161161d9190612e85565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f8160086130aa565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130d2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612481576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612493565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124be8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124dc8360801c63ffffffff1690565b63ffffffff16905060006124f68460401c63ffffffff1690565b63ffffffff16905060088310801561250c575080155b156125405760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125f5565b6008831015801561255e57508061255860088561306e565b93508310155b8015612572575061256f8782612ec3565b83105b156125f5576000612583828561306e565b905087612591826020612ec3565b1015801561259d575085155b156125d4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612682565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126308360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061265d8360101b67ffffffffffffffff1690565b1617905060008160201c61267b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061269a90612606565b612606565b60408201516126a890612606565b60401b176126c061269560018460059190911b015190565b825160809190911b906126d290612606565b60c01b17179392505050565b826010810192821561270c579160200282015b8281111561270c5782518255916020019190600101906126f1565b50612718929150612734565b5090565b604051806020016040528061272f612749565b905290565b5b808211156127185760008155600101612735565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561277a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127a557600080fd5b919050565b600080604083850312156127bd57600080fd5b6127c683612781565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612827576128276127d4565b60405290565b6040516060810167ffffffffffffffff81118282101715612827576128276127d4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612897576128976127d4565b604052919050565b60006103208083850312156128b357600080fd5b604051602080820167ffffffffffffffff83821081831117156128d8576128d86127d4565b8160405283955087601f8801126128ee57600080fd5b6128f6612803565b948701949150818886111561290a57600080fd5b875b8681101561293257803583811681146129255760008081fd5b845292840192840161290c565b50909352509295945050505050565b60006060828403121561295357600080fd5b50919050565b60008083601f84011261296b57600080fd5b50813567ffffffffffffffff81111561298357600080fd5b6020830191508360208260051b850101111561299e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129c457600080fd5b6129cd8a612781565b985060208a013597506129e38b60408c0161289f565b96506103608a013567ffffffffffffffff80821115612a0157600080fd5b612a0d8d838e01612941565b97506103808c0135915080821115612a2457600080fd5b612a308d838e01612959565b90975095506103a08c0135915080821115612a4a57600080fd5b612a568d838e01612941565b94506103c08c0135915080821115612a6d57600080fd5b50612a7a8c828d01612959565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612aa957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612adf57600080fd5b50508035926020909101359150565b60008083601f840112612b0057600080fd5b50813567ffffffffffffffff811115612b1857600080fd5b60208301915083602082850101111561299e57600080fd5b600080600080600080600060a0888a031215612b4b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b7157600080fd5b612b7d8b838c01612aee565b909750955060608a0135915080821115612b9657600080fd5b50612ba38a828b01612959565b90945092505060808801358015158114612bbc57600080fd5b8091505092959891949750929550565b600080600060608486031215612be157600080fd5b612bea84612781565b95602085013595506040909401359392505050565b600080600060408486031215612c1457600080fd5b83359250602084013567ffffffffffffffff811115612c3257600080fd5b612c3e86828701612aee565b9497909650939450505050565b600080600080600060808688031215612c6357600080fd5b612c6c86612781565b945060208601359350604086013567ffffffffffffffff80821115612c9057600080fd5b612c9c89838a01612941565b94506060880135915080821115612cb257600080fd5b50612cbf88828901612959565b969995985093965092949392505050565b803563ffffffff811681146127a557600080fd5b600080600060608486031215612cf957600080fd5b83359250612d0960208501612cd0565b9150612d1760408501612cd0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612daf57612daf612d4f565b5060010190565b600060608236031215612dc857600080fd5b612dd061282d565b823567ffffffffffffffff80821115612de857600080fd5b9084019036601f830112612dfb57600080fd5b8135602082821115612e0f57612e0f6127d4565b612e3f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612850565b92508183523681838601011115612e5557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eba57825167ffffffffffffffff16825260209283019290910190600101612e91565b50505092915050565b60008219821115612ed657612ed6612d4f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f1057600080fd5b83018035915067ffffffffffffffff821115612f2b57600080fd5b60200191503681900382131561299e57600080fd5b600181815b80851115612f9957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f7f57612f7f612d4f565b80851615612f8c57918102915b93841c9390800290612f45565b509250929050565b600082612fb05750600161305c565b81612fbd5750600061305c565b8160018114612fd35760028114612fdd57612ff9565b600191505061305c565b60ff841115612fee57612fee612d4f565b50506001821b61305c565b5060208310610133831016604e8410600b841016171561301c575081810a61305c565b6130268383612f40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561305857613058612d4f565b0290505b92915050565b600061241c8383612fa1565b60008282101561308057613080612d4f565b500390565b600063ffffffff838116908316818110156130a2576130a2612d4f565b039392505050565b600063ffffffff8083168185168083038211156130c9576130c9612d4f565b01949350505050565b6000845160005b818110156130f357602081880181015185830152016130d9565b81811115613102576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
} }
// AlphabetVMABI is the input ABI used to generate the binding from. // AlphabetVMABI is the input ABI used to generate the binding from.
......
...@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct { ...@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct {
// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract. // PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract.
var PreimageOracleMetaData = &bind.MetaData{ var PreimageOracleMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]}]", ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_inputStartBlock\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60c06040523480156200001157600080fd5b5060405162003289380380620032898339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a0516130c0620001c9600039600081816103db015261184201526000818161044f01526110ef01526130c06000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80639d53a6481461032b5780639f99ef821461036d578063b2e67ba81461038057600080fd5b806361238bde116101505780638542cf501161012a5780638542cf50146102ae578063882856ef146102ec5780638dc4be111461031857600080fd5b806361238bde146102455780636551927b146102705780637ac547671461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b636600461270e565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa366004612750565b6104eb565b6040519081526020016101e3565b6101ff601081565b61022861022336600461294b565b610623565b005b6101ff610871565b6101ff610240366004612a37565b61088c565b6101ff610253366004612a72565b600160209081526000928352604080842090915290825290205481565b6101ff61027e366004612750565b601560209081526000928352604080842090915290825290205481565b6101ff6102a936600461270e565b610961565b6102dc6102bc366004612a72565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b6102ff6102fa366004612a94565b610978565b60405167ffffffffffffffff90911681526020016101e3565b610228610326366004612b09565b6109d2565b6101ff610339366004612750565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b61022861037b366004612b55565b610acd565b6101ff61038e366004612750565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612a94565b611048565b6102286103cc36600461294b565b61107a565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612a72565b611445565b604080519283526020830191909152016101e3565b610228610435366004612b09565b611536565b610228610448366004612be6565b61163e565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612c7f565b6117b8565b6101ff61049436600461270e565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612cbb565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612cbb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d19565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612d51565b6119cb565b611a0b565b80156106705750610670838383602088013561064d6106488a612d51565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e20565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612e5e565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612e76565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6c92505050565b6107a788611bc7565b8360400135886040516020016107bd9190612e20565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002612ffd565b6108899190613009565b81565b60006108988686612463565b90506108a5836008612e5e565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061097157600080fd5b0154905081565b601760205282600052604060002060205281600052604060002081815481106109a057600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106109f05763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610a1d57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b333214610b06576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608115610b1f57610b188686612510565b9050610b59565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b815481526020019060010190808311610b865750503360009081526015602090815260408083208f8452909152902054939450610bc892508391506125999050565b63ffffffff16600003610c07576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c118160c01c90565b67ffffffffffffffff1615610c52576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c648260a01c63ffffffff1690565b67ffffffffffffffff1690506000610c828360401c63ffffffff1690565b63ffffffff169050600882108015610c98575080155b15610d1f576000610caf8460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610dd4565b60088210158015610d3d575080610d37600884613009565b92508210155b8015610d515750610d4e8982612e5e565b82105b15610dd4576000610d628284613009565b905089610d70826020612e5e565b10158015610d7c575086155b15610db3576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610de68460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610e13576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610ec3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610eb8576001821615610e985782818d0152610eb8565b8b81015160009081526020938452604090209260019290921c9101610e7b565b505050608801610e20565b50505050600160106002610ed79190612ffd565b610ee19190613009565b811115610f1a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610f4090866010612684565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610ff4610fa2838c612e5e565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b9350861561101f5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b6014602052826000526040600020602052816000526040600020816010811061107057600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156110ed576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006111188260c01c90565b61112c9067ffffffffffffffff1642613009565b11611163576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061116f8b8b6104eb565b905061118887878360208c013561064d6106488e612d51565b80156111a657506111a6848483602089013561064d6106488b612d51565b6111dc576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111f29190612e20565b604051602081830303815290604052805190602001201461123f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016112559190612e5e565b1415806112875750600161126f8360601c63ffffffff1690565b6112799190613020565b63ffffffff16856020013514155b156112be576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112d08360801c63ffffffff1690565b63ffffffff169050806112e98460401c63ffffffff1690565b63ffffffff1614611326576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113348a6107648880612e76565b61133d8a611bc7565b60006113488b6125a5565b9050600061135c8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546114ea816008612e5e565b6114f5856020612e5e565b106115135783611506826008612e5e565b6115109190613009565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106115545763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061164a86866104eb565b9050611663838383602088013561064d6106488a612d51565b611699576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156116d5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd6126c2565b6116eb816107648780612e76565b6116f481611bc7565b84604001358160405160200161170a9190612e20565b6040516020818303038152906040528051906020012003611757576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146117f1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fc816008613045565b63ffffffff168263ffffffff1610611840576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156118a0576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b60008160000151826020015183604001516040516020016119ee9392919061306d565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611a5f578060051b880135600186831c1660018114611a445760008481526020839052604090209350611a55565b600082815260208590526040902093505b5050600101611a11565b5090931495945050505050565b6088815114611a7a57600080fd5b6020810160208301611afb565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611af581611ae0868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611b0760008383611a87565b611b1360018383611a87565b611b1f60028383611a87565b611b2b60038383611a87565b611b3760048383611a87565b611b4360058383611a87565b611b4f60068383611a87565b611b5b60078383611a87565b611b6760088383611a87565b611b7360098383611a87565b611b7f600a8383611a87565b611b8b600b8383611a87565b611b97600c8383611a87565b611ba3600d8383611a87565b611baf600e8383611a87565b611bbb600f8383611a87565b611af560108383611a87565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612343565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611d7a8660011b67ffffffffffffffff1690565b18188584603f1c611d958660011b67ffffffffffffffff1690565b18188584603f1c611db08660011b67ffffffffffffffff1690565b181895508483603f1c611dcd8560011b67ffffffffffffffff1690565b181894508387603f1c611dea8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61216a81611cbd565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611af5565b61234f60008284612161565b61235b60018284612161565b61236760028284612161565b61237360038284612161565b61237f60048284612161565b61238b60058284612161565b61239760068284612161565b6123a360078284612161565b6123af60088284612161565b6123bb60098284612161565b6123c7600a8284612161565b6123d3600b8284612161565b6123df600c8284612161565b6123eb600d8284612161565b6123f7600e8284612161565b612403600f8284612161565b61240f60108284612161565b61241b60118284612161565b61242760128284612161565b61243360138284612161565b61243f60148284612161565b61244b60158284612161565b61245760168284612161565b611af560178284612161565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612509818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561256e576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612580565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b6000612628565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006125d68360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006126038360101b67ffffffffffffffff1690565b1617905060008160201c6126218360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612640906125ac565b6125ac565b604082015161264e906125ac565b60401b1761266661263b60018460059190911b015190565b825160809190911b90612678906125ac565b60c01b17179392505050565b82601081019282156126b2579160200282015b828111156126b2578251825591602001919060010190612697565b506126be9291506126da565b5090565b60405180602001604052806126d56126ef565b905290565b5b808211156126be57600081556001016126db565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561272057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461274b57600080fd5b919050565b6000806040838503121561276357600080fd5b61276c83612727565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156127cd576127cd61277a565b60405290565b6040516060810167ffffffffffffffff811182821017156127cd576127cd61277a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561283d5761283d61277a565b604052919050565b600061032080838503121561285957600080fd5b604051602080820167ffffffffffffffff838210818311171561287e5761287e61277a565b8160405283955087601f88011261289457600080fd5b61289c6127a9565b94870194915081888611156128b057600080fd5b875b868110156128d857803583811681146128cb5760008081fd5b84529284019284016128b2565b50909352509295945050505050565b6000606082840312156128f957600080fd5b50919050565b60008083601f84011261291157600080fd5b50813567ffffffffffffffff81111561292957600080fd5b6020830191508360208260051b850101111561294457600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561296a57600080fd5b6129738a612727565b985060208a013597506129898b60408c01612845565b96506103608a013567ffffffffffffffff808211156129a757600080fd5b6129b38d838e016128e7565b97506103808c01359150808211156129ca57600080fd5b6129d68d838e016128ff565b90975095506103a08c01359150808211156129f057600080fd5b6129fc8d838e016128e7565b94506103c08c0135915080821115612a1357600080fd5b50612a208c828d016128ff565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a4f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612a8557600080fd5b50508035926020909101359150565b600080600060608486031215612aa957600080fd5b612ab284612727565b95602085013595506040909401359392505050565b60008083601f840112612ad957600080fd5b50813567ffffffffffffffff811115612af157600080fd5b60208301915083602082850101111561294457600080fd5b600080600060408486031215612b1e57600080fd5b83359250602084013567ffffffffffffffff811115612b3c57600080fd5b612b4886828701612ac7565b9497909650939450505050565b60008060008060008060808789031215612b6e57600080fd5b86359550602087013567ffffffffffffffff80821115612b8d57600080fd5b612b998a838b01612ac7565b90975095506040890135915080821115612bb257600080fd5b50612bbf89828a016128ff565b90945092505060608701358015158114612bd857600080fd5b809150509295509295509295565b600080600080600060808688031215612bfe57600080fd5b612c0786612727565b945060208601359350604086013567ffffffffffffffff80821115612c2b57600080fd5b612c3789838a016128e7565b94506060880135915080821115612c4d57600080fd5b50612c5a888289016128ff565b969995985093965092949392505050565b803563ffffffff8116811461274b57600080fd5b600080600060608486031215612c9457600080fd5b83359250612ca460208501612c6b565b9150612cb260408501612c6b565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d4a57612d4a612cea565b5060010190565b600060608236031215612d6357600080fd5b612d6b6127d3565b823567ffffffffffffffff80821115612d8357600080fd5b9084019036601f830112612d9657600080fd5b8135602082821115612daa57612daa61277a565b612dda817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016127f6565b92508183523681838601011115612df057600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612e5557825167ffffffffffffffff16825260209283019290910190600101612e2c565b50505092915050565b60008219821115612e7157612e71612cea565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612eab57600080fd5b83018035915067ffffffffffffffff821115612ec657600080fd5b60200191503681900382131561294457600080fd5b600181815b80851115612f3457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f1a57612f1a612cea565b80851615612f2757918102915b93841c9390800290612ee0565b509250929050565b600082612f4b57506001612ff7565b81612f5857506000612ff7565b8160018114612f6e5760028114612f7857612f94565b6001915050612ff7565b60ff841115612f8957612f89612cea565b50506001821b612ff7565b5060208310610133831016604e8410600b8410161715612fb7575081810a612ff7565b612fc18383612edb565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612ff357612ff3612cea565b0290505b92915050565b60006125098383612f3c565b60008282101561301b5761301b612cea565b500390565b600063ffffffff8381169083168181101561303d5761303d612cea565b039392505050565b600063ffffffff80831681851680830382111561306457613064612cea565b01949350505050565b6000845160005b8181101561308e5760208188018101518583015201613074565b8181111561309d576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a", Bin: "0x60c06040523480156200001157600080fd5b50604051620032ee380380620032ee8339810160408190526200003491620000f3565b60a0829052608081905260005b6200004f600160106200012e565b811015620000ea57600381601081106200006d576200006d62000148565b01546003826010811062000085576200008562000148565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c091906200015e565b60108110620000d357620000d362000148565b015580620000e18162000179565b91505062000041565b50505062000195565b600080604083850312156200010757600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b60008282101562000143576200014362000118565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000174576200017462000118565b500190565b6000600182016200018e576200018e62000118565b5060010190565b60805160a051613125620001c9600039600081816103db015261175501526000818161044f015261100201526131256000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612768565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa3660046127aa565b6104eb565b6040519081526020016101e3565b6101ff601081565b6102286102233660046129a5565b610623565b005b6101ff610871565b6101ff610240366004612a91565b61088c565b6101ff610253366004612acc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e3660046127aa565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b30565b610961565b6101ff6102bc366004612768565b610def565b6102ef6102cf366004612acc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bcc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bff565b610e60565b6101ff61034c3660046127aa565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e3660046127aa565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bcc565b610f5b565b6102286103cc3660046129a5565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612acc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bff565b611449565b610228610448366004612c4b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612ce4565b6116cb565b6101ff610494366004612768565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d20565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d20565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d7e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612db6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612db6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e85565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612ec3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612edb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e85565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613062565b610889919061306e565b81565b60006108988686612376565b90506108a5836008612ec3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d88866124ac565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613062565b610c76919061306e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612ec3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126de565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261306e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612db6565b80156110b957506110b9848483602089013561064d6106488b612db6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e85565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612ec3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613085565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612edb565b6112508a611ada565b600061125b8b6125ff565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612ec3565b611408856020612ec3565b106114265783611419826008612ec3565b611423919061306e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612db6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061271c565b6115fe816107648780612edb565b61160781611ada565b84604001358160405160200161161d9190612e85565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f8160086130aa565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130d2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612481576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612493565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124be8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124dc8360801c63ffffffff1690565b63ffffffff16905060006124f68460401c63ffffffff1690565b63ffffffff16905060088310801561250c575080155b156125405760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125f5565b6008831015801561255e57508061255860088561306e565b93508310155b8015612572575061256f8782612ec3565b83105b156125f5576000612583828561306e565b905087612591826020612ec3565b1015801561259d575085155b156125d4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612682565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126308360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061265d8360101b67ffffffffffffffff1690565b1617905060008160201c61267b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061269a90612606565b612606565b60408201516126a890612606565b60401b176126c061269560018460059190911b015190565b825160809190911b906126d290612606565b60c01b17179392505050565b826010810192821561270c579160200282015b8281111561270c5782518255916020019190600101906126f1565b50612718929150612734565b5090565b604051806020016040528061272f612749565b905290565b5b808211156127185760008155600101612735565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561277a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127a557600080fd5b919050565b600080604083850312156127bd57600080fd5b6127c683612781565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612827576128276127d4565b60405290565b6040516060810167ffffffffffffffff81118282101715612827576128276127d4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612897576128976127d4565b604052919050565b60006103208083850312156128b357600080fd5b604051602080820167ffffffffffffffff83821081831117156128d8576128d86127d4565b8160405283955087601f8801126128ee57600080fd5b6128f6612803565b948701949150818886111561290a57600080fd5b875b8681101561293257803583811681146129255760008081fd5b845292840192840161290c565b50909352509295945050505050565b60006060828403121561295357600080fd5b50919050565b60008083601f84011261296b57600080fd5b50813567ffffffffffffffff81111561298357600080fd5b6020830191508360208260051b850101111561299e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129c457600080fd5b6129cd8a612781565b985060208a013597506129e38b60408c0161289f565b96506103608a013567ffffffffffffffff80821115612a0157600080fd5b612a0d8d838e01612941565b97506103808c0135915080821115612a2457600080fd5b612a308d838e01612959565b90975095506103a08c0135915080821115612a4a57600080fd5b612a568d838e01612941565b94506103c08c0135915080821115612a6d57600080fd5b50612a7a8c828d01612959565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612aa957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612adf57600080fd5b50508035926020909101359150565b60008083601f840112612b0057600080fd5b50813567ffffffffffffffff811115612b1857600080fd5b60208301915083602082850101111561299e57600080fd5b600080600080600080600060a0888a031215612b4b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b7157600080fd5b612b7d8b838c01612aee565b909750955060608a0135915080821115612b9657600080fd5b50612ba38a828b01612959565b90945092505060808801358015158114612bbc57600080fd5b8091505092959891949750929550565b600080600060608486031215612be157600080fd5b612bea84612781565b95602085013595506040909401359392505050565b600080600060408486031215612c1457600080fd5b83359250602084013567ffffffffffffffff811115612c3257600080fd5b612c3e86828701612aee565b9497909650939450505050565b600080600080600060808688031215612c6357600080fd5b612c6c86612781565b945060208601359350604086013567ffffffffffffffff80821115612c9057600080fd5b612c9c89838a01612941565b94506060880135915080821115612cb257600080fd5b50612cbf88828901612959565b969995985093965092949392505050565b803563ffffffff811681146127a557600080fd5b600080600060608486031215612cf957600080fd5b83359250612d0960208501612cd0565b9150612d1760408501612cd0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612daf57612daf612d4f565b5060010190565b600060608236031215612dc857600080fd5b612dd061282d565b823567ffffffffffffffff80821115612de857600080fd5b9084019036601f830112612dfb57600080fd5b8135602082821115612e0f57612e0f6127d4565b612e3f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612850565b92508183523681838601011115612e5557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eba57825167ffffffffffffffff16825260209283019290910190600101612e91565b50505092915050565b60008219821115612ed657612ed6612d4f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f1057600080fd5b83018035915067ffffffffffffffff821115612f2b57600080fd5b60200191503681900382131561299e57600080fd5b600181815b80851115612f9957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f7f57612f7f612d4f565b80851615612f8c57918102915b93841c9390800290612f45565b509250929050565b600082612fb05750600161305c565b81612fbd5750600061305c565b8160018114612fd35760028114612fdd57612ff9565b600191505061305c565b60ff841115612fee57612fee612d4f565b50506001821b61305c565b5060208310610133831016604e8410600b841016171561301c575081810a61305c565b6130268383612f40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561305857613058612d4f565b0290505b92915050565b600061241c8383612fa1565b60008282101561308057613080612d4f565b500390565b600063ffffffff838116908316818110156130a2576130a2612d4f565b039392505050565b600063ffffffff8083168185168083038211156130c9576130c9612d4f565b01949350505050565b6000845160005b818110156130f357602081880181015185830152016130d9565b81811115613102576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
} }
// PreimageOracleABI is the input ABI used to generate the binding from. // PreimageOracleABI is the input ABI used to generate the binding from.
...@@ -768,25 +768,25 @@ func (_PreimageOracle *PreimageOracleCallerSession) ZeroHashes(arg0 *big.Int) ([ ...@@ -768,25 +768,25 @@ func (_PreimageOracle *PreimageOracleCallerSession) ZeroHashes(arg0 *big.Int) ([
return _PreimageOracle.Contract.ZeroHashes(&_PreimageOracle.CallOpts, arg0) return _PreimageOracle.Contract.ZeroHashes(&_PreimageOracle.CallOpts, arg0)
} }
// AddLeavesLPP is a paid mutator transaction binding the contract method 0x9f99ef82. // AddLeavesLPP is a paid mutator transaction binding the contract method 0x7917de1d.
// //
// Solidity: function addLeavesLPP(uint256 _uuid, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns() // Solidity: function addLeavesLPP(uint256 _uuid, uint256 _inputStartBlock, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns()
func (_PreimageOracle *PreimageOracleTransactor) AddLeavesLPP(opts *bind.TransactOpts, _uuid *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleTransactor) AddLeavesLPP(opts *bind.TransactOpts, _uuid *big.Int, _inputStartBlock *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "addLeavesLPP", _uuid, _input, _stateCommitments, _finalize) return _PreimageOracle.contract.Transact(opts, "addLeavesLPP", _uuid, _inputStartBlock, _input, _stateCommitments, _finalize)
} }
// AddLeavesLPP is a paid mutator transaction binding the contract method 0x9f99ef82. // AddLeavesLPP is a paid mutator transaction binding the contract method 0x7917de1d.
// //
// Solidity: function addLeavesLPP(uint256 _uuid, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns() // Solidity: function addLeavesLPP(uint256 _uuid, uint256 _inputStartBlock, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns()
func (_PreimageOracle *PreimageOracleSession) AddLeavesLPP(_uuid *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleSession) AddLeavesLPP(_uuid *big.Int, _inputStartBlock *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) {
return _PreimageOracle.Contract.AddLeavesLPP(&_PreimageOracle.TransactOpts, _uuid, _input, _stateCommitments, _finalize) return _PreimageOracle.Contract.AddLeavesLPP(&_PreimageOracle.TransactOpts, _uuid, _inputStartBlock, _input, _stateCommitments, _finalize)
} }
// AddLeavesLPP is a paid mutator transaction binding the contract method 0x9f99ef82. // AddLeavesLPP is a paid mutator transaction binding the contract method 0x7917de1d.
// //
// Solidity: function addLeavesLPP(uint256 _uuid, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns() // Solidity: function addLeavesLPP(uint256 _uuid, uint256 _inputStartBlock, bytes _input, bytes32[] _stateCommitments, bool _finalize) returns()
func (_PreimageOracle *PreimageOracleTransactorSession) AddLeavesLPP(_uuid *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleTransactorSession) AddLeavesLPP(_uuid *big.Int, _inputStartBlock *big.Int, _input []byte, _stateCommitments [][32]byte, _finalize bool) (*types.Transaction, error) {
return _PreimageOracle.Contract.AddLeavesLPP(&_PreimageOracle.TransactOpts, _uuid, _input, _stateCommitments, _finalize) return _PreimageOracle.Contract.AddLeavesLPP(&_PreimageOracle.TransactOpts, _uuid, _inputStartBlock, _input, _stateCommitments, _finalize)
} }
// ChallengeFirstLPP is a paid mutator transaction binding the contract method 0xec5efcbc. // ChallengeFirstLPP is a paid mutator transaction binding the contract method 0xec5efcbc.
......
...@@ -13,7 +13,7 @@ const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac ...@@ -13,7 +13,7 @@ const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac
var PreimageOracleStorageLayout = new(solc.StorageLayout) var PreimageOracleStorageLayout = new(solc.StorageLayout)
var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80639d53a648116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80639d53a6481461032b5780639f99ef821461036d578063b2e67ba81461038057600080fd5b806361238bde116101505780638542cf501161012a5780638542cf50146102ae578063882856ef146102ec5780638dc4be111461031857600080fd5b806361238bde146102455780636551927b146102705780637ac547671461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b636600461270e565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa366004612750565b6104eb565b6040519081526020016101e3565b6101ff601081565b61022861022336600461294b565b610623565b005b6101ff610871565b6101ff610240366004612a37565b61088c565b6101ff610253366004612a72565b600160209081526000928352604080842090915290825290205481565b6101ff61027e366004612750565b601560209081526000928352604080842090915290825290205481565b6101ff6102a936600461270e565b610961565b6102dc6102bc366004612a72565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b6102ff6102fa366004612a94565b610978565b60405167ffffffffffffffff90911681526020016101e3565b610228610326366004612b09565b6109d2565b6101ff610339366004612750565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b61022861037b366004612b55565b610acd565b6101ff61038e366004612750565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612a94565b611048565b6102286103cc36600461294b565b61107a565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612a72565b611445565b604080519283526020830191909152016101e3565b610228610435366004612b09565b611536565b610228610448366004612be6565b61163e565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612c7f565b6117b8565b6101ff61049436600461270e565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612cbb565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612cbb565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d19565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612d51565b6119cb565b611a0b565b80156106705750610670838383602088013561064d6106488a612d51565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e20565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612e5e565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612e76565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a6c92505050565b6107a788611bc7565b8360400135886040516020016107bd9190612e20565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002612ffd565b6108899190613009565b81565b60006108988686612463565b90506108a5836008612e5e565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6003816010811061097157600080fd5b0154905081565b601760205282600052604060002060205281600052604060002081815481106109a057600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106109f05763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610a1d57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b333214610b06576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608115610b1f57610b188686612510565b9050610b59565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208a845290915280822081516102008101928390529160109082845b815481526020019060010190808311610b865750503360009081526015602090815260408083208f8452909152902054939450610bc892508391506125999050565b63ffffffff16600003610c07576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c118160c01c90565b67ffffffffffffffff1615610c52576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c648260a01c63ffffffff1690565b67ffffffffffffffff1690506000610c828360401c63ffffffff1690565b63ffffffff169050600882108015610c98575080155b15610d1f576000610caf8460801c63ffffffff1690565b905060008160c01b6000528b356008528351905080601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008f8152602001908152602001600020819055505050610dd4565b60088210158015610d3d575080610d37600884613009565b92508210155b8015610d515750610d4e8982612e5e565b82105b15610dd4576000610d628284613009565b905089610d70826020612e5e565b10158015610d7c575086155b15610db3576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208f84529091529020908b013590555b6000610de68460601c63ffffffff1690565b63ffffffff169050855160208701608882048a1415608883061715610e13576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610ec3578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8d013560a883015260c882206001860195508560005b610200811015610eb8576001821615610e985782818d0152610eb8565b8b81015160009081526020938452604090209260019290921c9101610e7b565b505050608801610e20565b50505050600160106002610ed79190612ffd565b610ee19190613009565b811115610f1a576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208f84529091529020610f4090866010612684565b503360009081526017602090815260408083208f845282528220805460018101825590835291206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055610ff4610fa2838c612e5e565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8716171790565b9350861561101f5777ffffffffffffffffffffffffffffffffffffffffffffffff84164260c01b1793505b50503360009081526015602090815260408083209c83529b905299909920555050505050505050565b6014602052826000526040600020602052816000526040600020816010811061107057600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156110ed576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006111188260c01c90565b61112c9067ffffffffffffffff1642613009565b11611163576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061116f8b8b6104eb565b905061118887878360208c013561064d6106488e612d51565b80156111a657506111a6848483602089013561064d6106488b612d51565b6111dc576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111f29190612e20565b604051602081830303815290604052805190602001201461123f576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016112559190612e5e565b1415806112875750600161126f8360601c63ffffffff1690565b6112799190613020565b63ffffffff16856020013514155b156112be576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112d08360801c63ffffffff1690565b63ffffffff169050806112e98460401c63ffffffff1690565b63ffffffff1614611326576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113348a6107648880612e76565b61133d8a611bc7565b60006113488b6125a5565b9050600061135c8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546114ea816008612e5e565b6114f5856020612e5e565b106115135783611506826008612e5e565b6115109190613009565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106115545763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061164a86866104eb565b9050611663838383602088013561064d6106488a612d51565b611699576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156116d5576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd6126c2565b6116eb816107648780612e76565b6116f481611bc7565b84604001358160405160200161170a9190612e20565b6040516020818303038152906040528051906020012003611757576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b3332146117f1576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fc816008613045565b63ffffffff168263ffffffff1610611840576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156118a0576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b60008160000151826020015183604001516040516020016119ee9392919061306d565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611a5f578060051b880135600186831c1660018114611a445760008481526020839052604090209350611a55565b600082815260208590526040902093505b5050600101611a11565b5090931495945050505050565b6088815114611a7a57600080fd5b6020810160208301611afb565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611af581611ae0868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611b0760008383611a87565b611b1360018383611a87565b611b1f60028383611a87565b611b2b60038383611a87565b611b3760048383611a87565b611b4360058383611a87565b611b4f60068383611a87565b611b5b60078383611a87565b611b6760088383611a87565b611b7360098383611a87565b611b7f600a8383611a87565b611b8b600b8383611a87565b611b97600c8383611a87565b611ba3600d8383611a87565b611baf600e8383611a87565b611bbb600f8383611a87565b611af560108383611a87565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612343565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611d7a8660011b67ffffffffffffffff1690565b18188584603f1c611d958660011b67ffffffffffffffff1690565b18188584603f1c611db08660011b67ffffffffffffffff1690565b181895508483603f1c611dcd8560011b67ffffffffffffffff1690565b181894508387603f1c611dea8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61216a81611cbd565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611af5565b61234f60008284612161565b61235b60018284612161565b61236760028284612161565b61237360038284612161565b61237f60048284612161565b61238b60058284612161565b61239760068284612161565b6123a360078284612161565b6123af60088284612161565b6123bb60098284612161565b6123c7600a8284612161565b6123d3600b8284612161565b6123df600c8284612161565b6123eb600d8284612161565b6123f7600e8284612161565b612403600f8284612161565b61240f60108284612161565b61241b60118284612161565b61242760128284612161565b61243360138284612161565b61243f60148284612161565b61244b60158284612161565b61245760168284612161565b611af560178284612161565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831617612509818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561256e576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612580565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60801c63ffffffff1690565b6000612628565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006125d68360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff00006126038360101b67ffffffffffffffff1690565b1617905060008160201c6126218360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612640906125ac565b6125ac565b604082015161264e906125ac565b60401b1761266661263b60018460059190911b015190565b825160809190911b90612678906125ac565b60c01b17179392505050565b82601081019282156126b2579160200282015b828111156126b2578251825591602001919060010190612697565b506126be9291506126da565b5090565b60405180602001604052806126d56126ef565b905290565b5b808211156126be57600081556001016126db565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561272057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461274b57600080fd5b919050565b6000806040838503121561276357600080fd5b61276c83612727565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff811182821017156127cd576127cd61277a565b60405290565b6040516060810167ffffffffffffffff811182821017156127cd576127cd61277a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561283d5761283d61277a565b604052919050565b600061032080838503121561285957600080fd5b604051602080820167ffffffffffffffff838210818311171561287e5761287e61277a565b8160405283955087601f88011261289457600080fd5b61289c6127a9565b94870194915081888611156128b057600080fd5b875b868110156128d857803583811681146128cb5760008081fd5b84529284019284016128b2565b50909352509295945050505050565b6000606082840312156128f957600080fd5b50919050565b60008083601f84011261291157600080fd5b50813567ffffffffffffffff81111561292957600080fd5b6020830191508360208260051b850101111561294457600080fd5b9250929050565b60008060008060008060008060006103e08a8c03121561296a57600080fd5b6129738a612727565b985060208a013597506129898b60408c01612845565b96506103608a013567ffffffffffffffff808211156129a757600080fd5b6129b38d838e016128e7565b97506103808c01359150808211156129ca57600080fd5b6129d68d838e016128ff565b90975095506103a08c01359150808211156129f057600080fd5b6129fc8d838e016128e7565b94506103c08c0135915080821115612a1357600080fd5b50612a208c828d016128ff565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612a4f57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612a8557600080fd5b50508035926020909101359150565b600080600060608486031215612aa957600080fd5b612ab284612727565b95602085013595506040909401359392505050565b60008083601f840112612ad957600080fd5b50813567ffffffffffffffff811115612af157600080fd5b60208301915083602082850101111561294457600080fd5b600080600060408486031215612b1e57600080fd5b83359250602084013567ffffffffffffffff811115612b3c57600080fd5b612b4886828701612ac7565b9497909650939450505050565b60008060008060008060808789031215612b6e57600080fd5b86359550602087013567ffffffffffffffff80821115612b8d57600080fd5b612b998a838b01612ac7565b90975095506040890135915080821115612bb257600080fd5b50612bbf89828a016128ff565b90945092505060608701358015158114612bd857600080fd5b809150509295509295509295565b600080600080600060808688031215612bfe57600080fd5b612c0786612727565b945060208601359350604086013567ffffffffffffffff80821115612c2b57600080fd5b612c3789838a016128e7565b94506060880135915080821115612c4d57600080fd5b50612c5a888289016128ff565b969995985093965092949392505050565b803563ffffffff8116811461274b57600080fd5b600080600060608486031215612c9457600080fd5b83359250612ca460208501612c6b565b9150612cb260408501612c6b565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d4a57612d4a612cea565b5060010190565b600060608236031215612d6357600080fd5b612d6b6127d3565b823567ffffffffffffffff80821115612d8357600080fd5b9084019036601f830112612d9657600080fd5b8135602082821115612daa57612daa61277a565b612dda817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016127f6565b92508183523681838601011115612df057600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612e5557825167ffffffffffffffff16825260209283019290910190600101612e2c565b50505092915050565b60008219821115612e7157612e71612cea565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612eab57600080fd5b83018035915067ffffffffffffffff821115612ec657600080fd5b60200191503681900382131561294457600080fd5b600181815b80851115612f3457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f1a57612f1a612cea565b80851615612f2757918102915b93841c9390800290612ee0565b509250929050565b600082612f4b57506001612ff7565b81612f5857506000612ff7565b8160018114612f6e5760028114612f7857612f94565b6001915050612ff7565b60ff841115612f8957612f89612cea565b50506001821b612ff7565b5060208310610133831016604e8410600b8410161715612fb7575081810a612ff7565b612fc18383612edb565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612ff357612ff3612cea565b0290505b92915050565b60006125098383612f3c565b60008282101561301b5761301b612cea565b500390565b600063ffffffff8381169083168181101561303d5761303d612cea565b039392505050565b600063ffffffff80831681851680830382111561306457613064612cea565b01949350505050565b6000845160005b8181101561308e5760208188018101518583015201613074565b8181111561309d576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a" var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638dc4be11116100ee578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc1461043a578063f3f480d91461044d578063faf37bc714610473578063fef2b4ed1461048657600080fd5b8063dd24f9bf146103d9578063e03110e1146103ff578063e15926111461042757600080fd5b8063b4801e61116100c8578063b4801e61146103ab578063d18534b5146103be578063da35c664146103d157600080fd5b80638dc4be111461032b5780639d53a6481461033e578063b2e67ba81461038057600080fd5b806361238bde116101505780637ac547671161012a5780637ac54767146102ae5780638542cf50146102c1578063882856ef146102ff57600080fd5b806361238bde146102455780636551927b146102705780637917de1d1461029b57600080fd5b80633909af5c116101815780633909af5c146102155780634d52b4c91461022a57806352f0f3ad1461023257600080fd5b8063013cf08b146101a85780630359a563146101ec5780632055b36b1461020d575b600080fd5b6101bb6101b6366004612768565b6104a6565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b6101ff6101fa3660046127aa565b6104eb565b6040519081526020016101e3565b6101ff601081565b6102286102233660046129a5565b610623565b005b6101ff610871565b6101ff610240366004612a91565b61088c565b6101ff610253366004612acc565b600160209081526000928352604080842090915290825290205481565b6101ff61027e3660046127aa565b601560209081526000928352604080842090915290825290205481565b6102286102a9366004612b30565b610961565b6101ff6102bc366004612768565b610def565b6102ef6102cf366004612acc565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101e3565b61031261030d366004612bcc565b610e06565b60405167ffffffffffffffff90911681526020016101e3565b610228610339366004612bff565b610e60565b6101ff61034c3660046127aa565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b6101ff61038e3660046127aa565b601660209081526000928352604080842090915290825290205481565b6101ff6103b9366004612bcc565b610f5b565b6102286103cc3660046129a5565b610f8d565b6013546101ff565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b61041261040d366004612acc565b611358565b604080519283526020830191909152016101e3565b610228610435366004612bff565b611449565b610228610448366004612c4b565b611551565b7f00000000000000000000000000000000000000000000000000000000000000006101ff565b610228610481366004612ce4565b6116cb565b6101ff610494366004612768565b60006020819052908152604090205481565b601381815481106104b657600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061052e9060601c63ffffffff1690565b63ffffffff16905060005b601081101561061b57816001166001036105c15773ffffffffffffffffffffffffffffffffffffffff851660009081526014602090815260408083208784529091529020816010811061058e5761058e612d20565b01546040805160208101929092528101849052606001604051602081830303815290604052805190602001209250610602565b82600382601081106105d5576105d5612d20565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061061381612d7e565b915050610539565b505092915050565b600061062f8a8a6104eb565b905061065286868360208b013561064d6106488d612db6565b6118de565b61191e565b80156106705750610670838383602088013561064d6106488a612db6565b6106a6576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106bc9190612e85565b6040516020818303038152906040528051906020012014610709576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161071f9190612ec3565b14610756576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079e886107648680612edb565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197f92505050565b6107a788611ada565b8360400135886040516020016107bd9190612e85565b604051602081830303815290604052805190602001200361080a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b600161087f60106002613062565b610889919061306e565b81565b60006108988686612376565b90506108a5836008612ec3565b8211806108b25750602083115b156108e9576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b6060811561097a576109738686612423565b90506109b4565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b8154815260200190600101908083116109e157505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a628260601c63ffffffff1690565b63ffffffff169050333214610aa3576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ab38260801c63ffffffff1690565b63ffffffff16600003610af2576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610afc8260c01c90565b67ffffffffffffffff1615610b3d576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610b76576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b8389898d88866124ac565b83516020850160888204881415608883061715610ba8576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c58578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c4d576001821615610c2d5782818b0152610c4d565b8981015160009081526020938452604090209260019290921c9101610c10565b505050608801610bb5565b50505050600160106002610c6c9190613062565b610c76919061306e565b811115610caf576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d24610cc28360401c63ffffffff1690565b610cd29063ffffffff168a612ec3565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610d4f5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b1791505b3360009081526014602090815260408083208e84529091529020610d75908460106126de565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610dff57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610e2e57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610e7e5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610eab57600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b60146020528260005260406000206020528160005260406000208160108110610f8357600080fd5b0154925083915050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff811615611000576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061102b8260c01c90565b61103f9067ffffffffffffffff164261306e565b11611076576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110828b8b6104eb565b905061109b87878360208c013561064d6106488e612db6565b80156110b957506110b9848483602089013561064d6106488b612db6565b6110ef576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016111059190612e85565b6040516020818303038152906040528051906020012014611152576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016111689190612ec3565b14158061119a575060016111828360601c63ffffffff1690565b61118c9190613085565b63ffffffff16856020013514155b156111d1576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e38360801c63ffffffff1690565b63ffffffff169050806111fc8460401c63ffffffff1690565b63ffffffff1614611239576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112478a6107648880612edb565b6112508a611ada565b600061125b8b6125ff565b9050600061126f8560a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008e8152602001908152602001600020546001600084815260200190815260200160002060008381526020019081526020016000208190555082600080848152602001908152602001600020819055505050505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546113fd816008612ec3565b611408856020612ec3565b106114265783611419826008612ec3565b611423919061306e565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106114675763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061155d86866104eb565b9050611576838383602088013561064d6106488a612db6565b6115ac576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156115e8576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115f061271c565b6115fe816107648780612edb565b61160781611ada565b84604001358160405160200161161d9190612e85565b604051602081830303815290604052805190602001200361166a576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611704576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61170f8160086130aa565b63ffffffff168263ffffffff1610611753576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff1610156117b3576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611901939291906130d2565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611972578060051b880135600186831c16600181146119575760008481526020839052604090209350611968565b600082815260208590526040902093505b5050600101611924565b5090931495945050505050565b608881511461198d57600080fd5b6020810160208301611a0e565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611a08816119f3868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611a1a6000838361199a565b611a266001838361199a565b611a326002838361199a565b611a3e6003838361199a565b611a4a6004838361199a565b611a566005838361199a565b611a626006838361199a565b611a6e6007838361199a565b611a7a6008838361199a565b611a866009838361199a565b611a92600a838361199a565b611a9e600b838361199a565b611aaa600c838361199a565b611ab6600d838361199a565b611ac2600e838361199a565b611ace600f838361199a565b611a086010838361199a565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612256565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c611c8d8660011b67ffffffffffffffff1690565b18188584603f1c611ca88660011b67ffffffffffffffff1690565b18188584603f1c611cc38660011b67ffffffffffffffff1690565b181895508483603f1c611ce08560011b67ffffffffffffffff1690565b181894508387603f1c611cfd8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61207d81611bd0565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611a08565b61226260008284612074565b61226e60018284612074565b61227a60028284612074565b61228660038284612074565b61229260048284612074565b61229e60058284612074565b6122aa60068284612074565b6122b660078284612074565b6122c260088284612074565b6122ce60098284612074565b6122da600a8284612074565b6122e6600b8284612074565b6122f2600c8284612074565b6122fe600d8284612074565b61230a600e8284612074565b612316600f8284612074565b61232260108284612074565b61232e60118284612074565b61233a60128284612074565b61234660138284612074565b61235260148284612074565b61235e60158284612074565b61236a60168284612074565b611a0860178284612074565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83161761241c818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612481576088829003850160808582017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01536001845160001a1784538652612493565b60018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006124be8260a01c63ffffffff1690565b67ffffffffffffffff16905060006124dc8360801c63ffffffff1690565b63ffffffff16905060006124f68460401c63ffffffff1690565b63ffffffff16905060088310801561250c575080155b156125405760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556125f5565b6008831015801561255e57508061255860088561306e565b93508310155b8015612572575061256f8782612ec3565b83105b156125f5576000612583828561306e565b905087612591826020612ec3565b1015801561259d575085155b156125d4576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612682565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006126308360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff000061265d8360101b67ffffffffffffffff1690565b1617905060008160201c61267b8360201b67ffffffffffffffff1690565b1792915050565b6080820151602083019061269a90612606565b612606565b60408201516126a890612606565b60401b176126c061269560018460059190911b015190565b825160809190911b906126d290612606565b60c01b17179392505050565b826010810192821561270c579160200282015b8281111561270c5782518255916020019190600101906126f1565b50612718929150612734565b5090565b604051806020016040528061272f612749565b905290565b5b808211156127185760008155600101612735565b6040518061032001604052806019906020820280368337509192915050565b60006020828403121561277a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146127a557600080fd5b919050565b600080604083850312156127bd57600080fd5b6127c683612781565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612827576128276127d4565b60405290565b6040516060810167ffffffffffffffff81118282101715612827576128276127d4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612897576128976127d4565b604052919050565b60006103208083850312156128b357600080fd5b604051602080820167ffffffffffffffff83821081831117156128d8576128d86127d4565b8160405283955087601f8801126128ee57600080fd5b6128f6612803565b948701949150818886111561290a57600080fd5b875b8681101561293257803583811681146129255760008081fd5b845292840192840161290c565b50909352509295945050505050565b60006060828403121561295357600080fd5b50919050565b60008083601f84011261296b57600080fd5b50813567ffffffffffffffff81111561298357600080fd5b6020830191508360208260051b850101111561299e57600080fd5b9250929050565b60008060008060008060008060006103e08a8c0312156129c457600080fd5b6129cd8a612781565b985060208a013597506129e38b60408c0161289f565b96506103608a013567ffffffffffffffff80821115612a0157600080fd5b612a0d8d838e01612941565b97506103808c0135915080821115612a2457600080fd5b612a308d838e01612959565b90975095506103a08c0135915080821115612a4a57600080fd5b612a568d838e01612941565b94506103c08c0135915080821115612a6d57600080fd5b50612a7a8c828d01612959565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612aa957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612adf57600080fd5b50508035926020909101359150565b60008083601f840112612b0057600080fd5b50813567ffffffffffffffff811115612b1857600080fd5b60208301915083602082850101111561299e57600080fd5b600080600080600080600060a0888a031215612b4b57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612b7157600080fd5b612b7d8b838c01612aee565b909750955060608a0135915080821115612b9657600080fd5b50612ba38a828b01612959565b90945092505060808801358015158114612bbc57600080fd5b8091505092959891949750929550565b600080600060608486031215612be157600080fd5b612bea84612781565b95602085013595506040909401359392505050565b600080600060408486031215612c1457600080fd5b83359250602084013567ffffffffffffffff811115612c3257600080fd5b612c3e86828701612aee565b9497909650939450505050565b600080600080600060808688031215612c6357600080fd5b612c6c86612781565b945060208601359350604086013567ffffffffffffffff80821115612c9057600080fd5b612c9c89838a01612941565b94506060880135915080821115612cb257600080fd5b50612cbf88828901612959565b969995985093965092949392505050565b803563ffffffff811681146127a557600080fd5b600080600060608486031215612cf957600080fd5b83359250612d0960208501612cd0565b9150612d1760408501612cd0565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612daf57612daf612d4f565b5060010190565b600060608236031215612dc857600080fd5b612dd061282d565b823567ffffffffffffffff80821115612de857600080fd5b9084019036601f830112612dfb57600080fd5b8135602082821115612e0f57612e0f6127d4565b612e3f817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612850565b92508183523681838601011115612e5557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b6019811015612eba57825167ffffffffffffffff16825260209283019290910190600101612e91565b50505092915050565b60008219821115612ed657612ed6612d4f565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612f1057600080fd5b83018035915067ffffffffffffffff821115612f2b57600080fd5b60200191503681900382131561299e57600080fd5b600181815b80851115612f9957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612f7f57612f7f612d4f565b80851615612f8c57918102915b93841c9390800290612f45565b509250929050565b600082612fb05750600161305c565b81612fbd5750600061305c565b8160018114612fd35760028114612fdd57612ff9565b600191505061305c565b60ff841115612fee57612fee612d4f565b50506001821b61305c565b5060208310610133831016604e8410600b841016171561301c575081810a61305c565b6130268383612f40565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561305857613058612d4f565b0290505b92915050565b600061241c8383612fa1565b60008282101561308057613080612d4f565b500390565b600063ffffffff838116908316818110156130a2576130a2612d4f565b039392505050565b600063ffffffff8083168185168083038211156130c9576130c9612d4f565b01949350505050565b6000845160005b818110156130f357602081880181015185830152016130d9565b81811115613102576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
func init() { func init() {
......
...@@ -94,8 +94,8 @@ func (c *PreimageOracleContract) InitLargePreimage(uuid *big.Int, partOffset uin ...@@ -94,8 +94,8 @@ func (c *PreimageOracleContract) InitLargePreimage(uuid *big.Int, partOffset uin
return call.ToTxCandidate() return call.ToTxCandidate()
} }
func (c *PreimageOracleContract) AddLeaves(uuid *big.Int, input []byte, commitments []common.Hash, finalize bool) (txmgr.TxCandidate, error) { func (c *PreimageOracleContract) AddLeaves(uuid *big.Int, startingBlockIndex *big.Int, input []byte, commitments []common.Hash, finalize bool) (txmgr.TxCandidate, error) {
call := c.contract.Call(methodAddLeavesLPP, uuid, input, commitments, finalize) call := c.contract.Call(methodAddLeavesLPP, uuid, startingBlockIndex, input, commitments, finalize)
return call.ToTxCandidate() return call.ToTxCandidate()
} }
...@@ -124,7 +124,7 @@ func (c *PreimageOracleContract) Squeeze( ...@@ -124,7 +124,7 @@ func (c *PreimageOracleContract) Squeeze(
// abiEncodeStateMatrix encodes the state matrix for the contract ABI // abiEncodeStateMatrix encodes the state matrix for the contract ABI
func abiEncodeStateMatrix(stateMatrix *matrix.StateMatrix) bindings.LibKeccakStateMatrix { func abiEncodeStateMatrix(stateMatrix *matrix.StateMatrix) bindings.LibKeccakStateMatrix {
packedState := stateMatrix.PackState() packedState := stateMatrix.PackState()
var stateSlice = new([25]uint64) stateSlice := new([25]uint64)
// SAFETY: a maximum of 25 * 8 bytes will be read from packedState and written to stateSlice // SAFETY: a maximum of 25 * 8 bytes will be read from packedState and written to stateSlice
for i := 0; i < min(len(packedState), 25*8); i += 8 { for i := 0; i < min(len(packedState), 25*8); i += 8 {
stateSlice[i/8] = new(big.Int).SetBytes(packedState[i : i+8]).Uint64() stateSlice[i/8] = new(big.Int).SetBytes(packedState[i : i+8]).Uint64()
...@@ -205,9 +205,10 @@ func (c *PreimageOracleContract) DecodeInputData(data []byte) (*big.Int, keccakT ...@@ -205,9 +205,10 @@ func (c *PreimageOracleContract) DecodeInputData(data []byte) (*big.Int, keccakT
return nil, keccakTypes.InputData{}, fmt.Errorf("%w: %v", ErrInvalidAddLeavesCall, method) return nil, keccakTypes.InputData{}, fmt.Errorf("%w: %v", ErrInvalidAddLeavesCall, method)
} }
uuid := args.GetBigInt(0) uuid := args.GetBigInt(0)
input := args.GetBytes(1) // Arg 1 is the starting block index which we don't current use
stateCommitments := args.GetBytes32Slice(2) input := args.GetBytes(2)
finalize := args.GetBool(3) stateCommitments := args.GetBytes32Slice(3)
finalize := args.GetBool(4)
commitments := make([]common.Hash, 0, len(stateCommitments)) commitments := make([]common.Hash, 0, len(stateCommitments))
for _, c := range stateCommitments { for _, c := range stateCommitments {
......
...@@ -56,17 +56,19 @@ func TestPreimageOracleContract_AddLeaves(t *testing.T) { ...@@ -56,17 +56,19 @@ func TestPreimageOracleContract_AddLeaves(t *testing.T) {
stubRpc, oracle := setupPreimageOracleTest(t) stubRpc, oracle := setupPreimageOracleTest(t)
uuid := big.NewInt(123) uuid := big.NewInt(123)
startingBlockIndex := big.NewInt(0)
input := []byte{0x12} input := []byte{0x12}
commitments := []common.Hash{{0x34}} commitments := []common.Hash{{0x34}}
finalize := true finalize := true
stubRpc.SetResponse(oracleAddr, methodAddLeavesLPP, batching.BlockLatest, []interface{}{ stubRpc.SetResponse(oracleAddr, methodAddLeavesLPP, batching.BlockLatest, []interface{}{
uuid, uuid,
startingBlockIndex,
input, input,
commitments, commitments,
finalize, finalize,
}, nil) }, nil)
tx, err := oracle.AddLeaves(uuid, input, commitments, finalize) tx, err := oracle.AddLeaves(uuid, startingBlockIndex, input, commitments, finalize)
require.NoError(t, err) require.NoError(t, err)
stubRpc.VerifyTxCandidate(tx) stubRpc.VerifyTxCandidate(tx)
} }
...@@ -356,7 +358,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -356,7 +358,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}}, Commitments: []common.Hash{{0xaa}},
Finalize: false, Finalize: false,
}, },
expectedTxData: "9f99ef8200000000000000000000000000000000000000000000000000000000000004570000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001aa00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs", name: "MultipleInputs",
...@@ -365,7 +367,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -365,7 +367,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: false, Finalize: false,
}, },
expectedTxData: "9f99ef820000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs-InputTooShort", name: "MultipleInputs-InputTooShort",
...@@ -374,7 +376,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -374,7 +376,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: false, Finalize: false,
}, },
expectedTxData: "9f99ef820000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00010203040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00010203040500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs-FinalizeDoesNotPadInput", name: "MultipleInputs-FinalizeDoesNotPadInput",
...@@ -383,7 +385,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -383,7 +385,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: true, Finalize: true,
}, },
expectedTxData: "9f99ef820000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000101000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000101000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs-FinalizePadding-FullBlock", name: "MultipleInputs-FinalizePadding-FullBlock",
...@@ -392,7 +394,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -392,7 +394,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: true, Finalize: true,
}, },
expectedTxData: "9f99ef820000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000110000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000110000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs-FinalizePadding-TrailingZeros", name: "MultipleInputs-FinalizePadding-TrailingZeros",
...@@ -401,7 +403,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -401,7 +403,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: true, Finalize: true,
}, },
expectedTxData: "9f99ef820000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
{ {
name: "MultipleInputs-FinalizePadding-ShorterThanSingleBlock", name: "MultipleInputs-FinalizePadding-ShorterThanSingleBlock",
...@@ -410,7 +412,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -410,7 +412,7 @@ func TestDecodeInputData(t *testing.T) {
Commitments: []common.Hash{{0xaa}, {0xbb}}, Commitments: []common.Hash{{0xaa}, {0xbb}},
Finalize: true, Finalize: true,
}, },
expectedTxData: "9f99ef8200000000000000000000000000000000000000000000000000000000000004570000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000083000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000", expectedTxData: "7917de1d0000000000000000000000000000000000000000000000000000000000000457000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000083000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002aa00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000",
}, },
} }
for _, test := range tests { for _, test := range tests {
...@@ -437,7 +439,7 @@ func TestDecodeInputData(t *testing.T) { ...@@ -437,7 +439,7 @@ func TestDecodeInputData(t *testing.T) {
} }
func toAddLeavesTxData(t *testing.T, oracle *PreimageOracleContract, uuid *big.Int, inputData keccakTypes.InputData) []byte { func toAddLeavesTxData(t *testing.T, oracle *PreimageOracleContract, uuid *big.Int, inputData keccakTypes.InputData) []byte {
tx, err := oracle.AddLeaves(uuid, inputData.Input, inputData.Commitments, inputData.Finalize) tx, err := oracle.AddLeaves(uuid, big.NewInt(1), inputData.Input, inputData.Commitments, inputData.Finalize)
require.NoError(t, err) require.NoError(t, err)
return tx.TxData return tx.TxData
} }
...@@ -139,11 +139,13 @@ func (p *LargePreimageUploader) initLargePreimage(ctx context.Context, uuid *big ...@@ -139,11 +139,13 @@ func (p *LargePreimageUploader) initLargePreimage(ctx context.Context, uuid *big
func (p *LargePreimageUploader) addLargePreimageData(ctx context.Context, uuid *big.Int, chunks []keccakTypes.InputData) error { func (p *LargePreimageUploader) addLargePreimageData(ctx context.Context, uuid *big.Int, chunks []keccakTypes.InputData) error {
queue := txmgr.NewQueue[int](ctx, p.txMgr, 10) queue := txmgr.NewQueue[int](ctx, p.txMgr, 10)
receiptChs := make([]chan txmgr.TxReceipt[int], len(chunks)) receiptChs := make([]chan txmgr.TxReceipt[int], len(chunks))
blocksProcessed := int64(0)
for i, chunk := range chunks { for i, chunk := range chunks {
tx, err := p.contract.AddLeaves(uuid, chunk.Input, chunk.Commitments, chunk.Finalize) tx, err := p.contract.AddLeaves(uuid, big.NewInt(blocksProcessed), chunk.Input, chunk.Commitments, chunk.Finalize)
if err != nil { if err != nil {
return fmt.Errorf("failed to create pre-image oracle tx: %w", err) return fmt.Errorf("failed to create pre-image oracle tx: %w", err)
} }
blocksProcessed += int64(len(chunk.Input) / keccakTypes.BlockSize)
receiptChs[i] = make(chan txmgr.TxReceipt[int], 1) receiptChs[i] = make(chan txmgr.TxReceipt[int], 1)
queue.Send(i, tx, receiptChs[i]) queue.Send(i, tx, receiptChs[i])
} }
......
...@@ -193,7 +193,8 @@ func (s *mockPreimageOracleContract) InitLargePreimage(_ *big.Int, _ uint32, _ u ...@@ -193,7 +193,8 @@ func (s *mockPreimageOracleContract) InitLargePreimage(_ *big.Int, _ uint32, _ u
} }
return txmgr.TxCandidate{}, nil return txmgr.TxCandidate{}, nil
} }
func (s *mockPreimageOracleContract) AddLeaves(_ *big.Int, input []byte, _ []common.Hash, _ bool) (txmgr.TxCandidate, error) {
func (s *mockPreimageOracleContract) AddLeaves(_ *big.Int, _ *big.Int, input []byte, _ []common.Hash, _ bool) (txmgr.TxCandidate, error) {
s.addCalls++ s.addCalls++
s.addData = append(s.addData, input...) s.addData = append(s.addData, input...)
if s.addFails { if s.addFails {
...@@ -201,6 +202,7 @@ func (s *mockPreimageOracleContract) AddLeaves(_ *big.Int, input []byte, _ []com ...@@ -201,6 +202,7 @@ func (s *mockPreimageOracleContract) AddLeaves(_ *big.Int, input []byte, _ []com
} }
return txmgr.TxCandidate{}, nil return txmgr.TxCandidate{}, nil
} }
func (s *mockPreimageOracleContract) Squeeze(_ common.Address, _ *big.Int, _ *matrix.StateMatrix, _ keccakTypes.Leaf, _ contracts.MerkleProof, _ keccakTypes.Leaf, _ contracts.MerkleProof) (txmgr.TxCandidate, error) { func (s *mockPreimageOracleContract) Squeeze(_ common.Address, _ *big.Int, _ *matrix.StateMatrix, _ keccakTypes.Leaf, _ contracts.MerkleProof, _ keccakTypes.Leaf, _ contracts.MerkleProof) (txmgr.TxCandidate, error) {
return txmgr.TxCandidate{}, nil return txmgr.TxCandidate{}, nil
} }
......
...@@ -25,7 +25,7 @@ type PreimageUploader interface { ...@@ -25,7 +25,7 @@ type PreimageUploader interface {
// PreimageOracleContract is the interface for interacting with the PreimageOracle contract. // PreimageOracleContract is the interface for interacting with the PreimageOracle contract.
type PreimageOracleContract interface { type PreimageOracleContract interface {
InitLargePreimage(uuid *big.Int, partOffset uint32, claimedSize uint32) (txmgr.TxCandidate, error) InitLargePreimage(uuid *big.Int, partOffset uint32, claimedSize uint32) (txmgr.TxCandidate, error)
AddLeaves(uuid *big.Int, input []byte, commitments []common.Hash, finalize bool) (txmgr.TxCandidate, error) AddLeaves(uuid *big.Int, startingBlockIndex *big.Int, input []byte, commitments []common.Hash, finalize bool) (txmgr.TxCandidate, error)
Squeeze(claimant common.Address, uuid *big.Int, stateMatrix *matrix.StateMatrix, preState keccakTypes.Leaf, preStateProof contracts.MerkleProof, postState keccakTypes.Leaf, postStateProof contracts.MerkleProof) (txmgr.TxCandidate, error) Squeeze(claimant common.Address, uuid *big.Int, stateMatrix *matrix.StateMatrix, preState keccakTypes.Leaf, preStateProof contracts.MerkleProof, postState keccakTypes.Leaf, postStateProof contracts.MerkleProof) (txmgr.TxCandidate, error)
GetProposalMetadata(ctx context.Context, block batching.Block, idents ...keccakTypes.LargePreimageIdent) ([]keccakTypes.LargePreimageMetaData, error) GetProposalMetadata(ctx context.Context, block batching.Block, idents ...keccakTypes.LargePreimageIdent) ([]keccakTypes.LargePreimageMetaData, error)
} }
...@@ -46,6 +46,7 @@ contract SubmitLPP is Script, StdAssertions { ...@@ -46,6 +46,7 @@ contract SubmitLPP is Script, StdAssertions {
vm.broadcast(); vm.broadcast();
oracle.addLeavesLPP({ oracle.addLeavesLPP({
_uuid: TEST_UUID, _uuid: TEST_UUID,
_inputStartBlock: i / 136,
_input: chunk, _input: chunk,
_stateCommitments: finalize ? mockStateCommitmentsLast : mockStateCommitments, _stateCommitments: finalize ? mockStateCommitmentsLast : mockStateCommitments,
_finalize: finalize _finalize: finalize
......
...@@ -1096,10 +1096,10 @@ ...@@ -1096,10 +1096,10 @@
"impact": "Medium", "impact": "Medium",
"confidence": "Medium", "confidence": "Medium",
"check": "uninitialized-local", "check": "uninitialized-local",
"description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#459) is a local variable never initialized\n", "description": "PreimageOracle.challengeFirstLPP(address,uint256,PreimageOracle.Leaf,bytes32[]).stateMatrix (src/cannon/PreimageOracle.sol#444) is a local variable never initialized\n",
"type": "variable", "type": "variable",
"name": "stateMatrix", "name": "stateMatrix",
"start": 20988, "start": 20524,
"length": 40, "length": 40,
"filename_relative": "src/cannon/PreimageOracle.sol" "filename_relative": "src/cannon/PreimageOracle.sol"
}, },
......
...@@ -48,6 +48,11 @@ ...@@ -48,6 +48,11 @@
"name": "_uuid", "name": "_uuid",
"type": "uint256" "type": "uint256"
}, },
{
"internalType": "uint256",
"name": "_inputStartBlock",
"type": "uint256"
},
{ {
"internalType": "bytes", "internalType": "bytes",
"name": "_input", "name": "_input",
...@@ -771,5 +776,10 @@ ...@@ -771,5 +776,10 @@
"inputs": [], "inputs": [],
"name": "TreeSizeOverflow", "name": "TreeSizeOverflow",
"type": "error" "type": "error"
},
{
"inputs": [],
"name": "WrongStartingBlock",
"type": "error"
} }
] ]
\ No newline at end of file
...@@ -278,15 +278,13 @@ contract PreimageOracle is IPreimageOracle { ...@@ -278,15 +278,13 @@ contract PreimageOracle is IPreimageOracle {
/// @notice Adds a contiguous list of keccak state matrices to the merkle tree. /// @notice Adds a contiguous list of keccak state matrices to the merkle tree.
function addLeavesLPP( function addLeavesLPP(
uint256 _uuid, uint256 _uuid,
uint256 _inputStartBlock,
bytes calldata _input, bytes calldata _input,
bytes32[] calldata _stateCommitments, bytes32[] calldata _stateCommitments,
bool _finalize bool _finalize
) )
external external
{ {
// The caller of `addLeavesLPP` must be an EOA.
if (msg.sender != tx.origin) revert NotEOA();
// If we're finalizing, pad the input for the submitter. If not, copy the input into memory verbatim. // If we're finalizing, pad the input for the submitter. If not, copy the input into memory verbatim.
bytes memory input; bytes memory input;
if (_finalize) { if (_finalize) {
...@@ -298,6 +296,10 @@ contract PreimageOracle is IPreimageOracle { ...@@ -298,6 +296,10 @@ contract PreimageOracle is IPreimageOracle {
// Pull storage variables onto the stack / into memory for operations. // Pull storage variables onto the stack / into memory for operations.
bytes32[KECCAK_TREE_DEPTH] memory branch = proposalBranches[msg.sender][_uuid]; bytes32[KECCAK_TREE_DEPTH] memory branch = proposalBranches[msg.sender][_uuid];
LPPMetaData metaData = proposalMetadata[msg.sender][_uuid]; LPPMetaData metaData = proposalMetadata[msg.sender][_uuid];
uint256 blocksProcessed = metaData.blocksProcessed();
// The caller of `addLeavesLPP` must be an EOA.
if (msg.sender != tx.origin) revert NotEOA();
// Revert if the proposal has not been initialized. 0-size preimages are *not* allowed. // Revert if the proposal has not been initialized. 0-size preimages are *not* allowed.
if (metaData.claimedSize() == 0) revert NotInitialized(); if (metaData.claimedSize() == 0) revert NotInitialized();
...@@ -305,37 +307,15 @@ contract PreimageOracle is IPreimageOracle { ...@@ -305,37 +307,15 @@ contract PreimageOracle is IPreimageOracle {
// Revert if the proposal has already been finalized. No leaves can be added after this point. // Revert if the proposal has already been finalized. No leaves can be added after this point.
if (metaData.timestamp() != 0) revert AlreadyFinalized(); if (metaData.timestamp() != 0) revert AlreadyFinalized();
// Check if the part offset is present in the input data being posted. If it is, assign the part to the mapping. // Revert if the starting block is not the next block to be added. This is to aid submitters in ensuring that
uint256 offset = metaData.partOffset(); // they don't corrupt an in-progress proposal by submitting input out of order.
uint256 currentSize = metaData.bytesProcessed(); if (blocksProcessed != _inputStartBlock) revert WrongStartingBlock();
if (offset < 8 && currentSize == 0) {
uint32 claimedSize = metaData.claimedSize();
bytes32 preimagePart;
assembly {
mstore(0x00, shl(192, claimedSize))
mstore(0x08, calldataload(_input.offset))
preimagePart := mload(offset)
}
proposalParts[msg.sender][_uuid] = preimagePart;
} else if (offset >= 8 && (offset = offset - 8) >= currentSize && offset < currentSize + _input.length) {
uint256 relativeOffset = offset - currentSize;
// Revert if the full preimage part is not available in the data we're absorbing. The submitter must
// supply data that contains the full preimage part so that no partial preimage parts are stored in the
// oracle. Partial parts are *only* allowed at the tail end of the preimage, where no more data is available
// to be absorbed.
if (relativeOffset + 32 >= _input.length && !_finalize) revert PartOffsetOOB();
// If the preimage part is in the data we're about to absorb, persist the part to the caller's large // Attempt to extract the preimage part from the input data, if the part offset is present in the current
// preimaage metadata. // chunk of input. This function has side effects, and will persist the preimage part to the caller's large
bytes32 preimagePart; // preimage proposal storage if the part offset is present in the input data.
assembly { _extractPreimagePart(_input, _uuid, _finalize, metaData);
preimagePart := calldataload(add(_input.offset, relativeOffset))
}
proposalParts[msg.sender][_uuid] = preimagePart;
}
uint256 blocksProcessed = metaData.blocksProcessed();
assembly { assembly {
let inputLen := mload(input) let inputLen := mload(input)
let inputPtr := add(input, 0x20) let inputPtr := add(input, 0x20)
...@@ -389,15 +369,20 @@ contract PreimageOracle is IPreimageOracle { ...@@ -389,15 +369,20 @@ contract PreimageOracle is IPreimageOracle {
// Do not allow for posting preimages larger than the merkle tree can support. // Do not allow for posting preimages larger than the merkle tree can support.
if (blocksProcessed > MAX_LEAF_COUNT) revert TreeSizeOverflow(); if (blocksProcessed > MAX_LEAF_COUNT) revert TreeSizeOverflow();
// Perist the branch to storage. // Update the proposal metadata to include the number of blocks processed and total bytes processed.
metaData = metaData.setBlocksProcessed(uint32(blocksProcessed)).setBytesProcessed(
uint32(_input.length + metaData.bytesProcessed())
);
// If the proposal is being finalized, set the timestamp to the current block timestamp. This begins the
// challenge period, which must be waited out before the proposal can be finalized.
if (_finalize) metaData = metaData.setTimestamp(uint64(block.timestamp));
// Perist the latest branch to storage.
proposalBranches[msg.sender][_uuid] = branch; proposalBranches[msg.sender][_uuid] = branch;
// Track the block number that these leaves were added at. // Persist the block number that these leaves were added in. This assists off-chain observers in reconstructing
// the proposal merkle tree by querying block bodies.
proposalBlocks[msg.sender][_uuid].push(uint64(block.number)); proposalBlocks[msg.sender][_uuid].push(uint64(block.number));
// Persist the updated metadata to storage.
// Update the proposal metadata.
metaData =
metaData.setBlocksProcessed(uint32(blocksProcessed)).setBytesProcessed(uint32(_input.length + currentSize));
if (_finalize) metaData = metaData.setTimestamp(uint64(block.timestamp));
proposalMetadata[msg.sender][_uuid] = metaData; proposalMetadata[msg.sender][_uuid] = metaData;
} }
...@@ -534,6 +519,52 @@ contract PreimageOracle is IPreimageOracle { ...@@ -534,6 +519,52 @@ contract PreimageOracle is IPreimageOracle {
} }
} }
/// @notice Attempts to persist the preimage part to the caller's large preimage proposal storage, if the preimage
/// part is present in the input data being posted.
/// @param _input The portion of the preimage being posted.
/// @param _uuid The UUID of the large preimage proposal.
/// @param _finalize Whether or not the proposal is being finalized in the current call.
/// @param _metaData The metadata of the large preimage proposal.
function _extractPreimagePart(
bytes calldata _input,
uint256 _uuid,
bool _finalize,
LPPMetaData _metaData
)
internal
{
uint256 offset = _metaData.partOffset();
uint256 claimedSize = _metaData.claimedSize();
uint256 currentSize = _metaData.bytesProcessed();
// Check if the part offset is present in the input data being posted. If it is, assign the part to the mapping.
if (offset < 8 && currentSize == 0) {
bytes32 preimagePart;
assembly {
mstore(0x00, shl(192, claimedSize))
mstore(0x08, calldataload(_input.offset))
preimagePart := mload(offset)
}
proposalParts[msg.sender][_uuid] = preimagePart;
} else if (offset >= 8 && (offset = offset - 8) >= currentSize && offset < currentSize + _input.length) {
uint256 relativeOffset = offset - currentSize;
// Revert if the full preimage part is not available in the data we're absorbing. The submitter must
// supply data that contains the full preimage part so that no partial preimage parts are stored in the
// oracle. Partial parts are *only* allowed at the tail end of the preimage, where no more data is available
// to be absorbed.
if (relativeOffset + 32 >= _input.length && !_finalize) revert PartOffsetOOB();
// If the preimage part is in the data we're about to absorb, persist the part to the caller's large
// preimaage metadata.
bytes32 preimagePart;
assembly {
preimagePart := calldataload(add(_input.offset, relativeOffset))
}
proposalParts[msg.sender][_uuid] = preimagePart;
}
}
/// Check if leaf` at `index` verifies against the Merkle `root` and `branch`. /// Check if leaf` at `index` verifies against the Merkle `root` and `branch`.
/// https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_valid_merkle_branch /// https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_valid_merkle_branch
function _verify( function _verify(
......
...@@ -13,6 +13,9 @@ error InvalidPreimage(); ...@@ -13,6 +13,9 @@ error InvalidPreimage();
/// @notice Thrown when a leaf with an invalid input size is added. /// @notice Thrown when a leaf with an invalid input size is added.
error InvalidInputSize(); error InvalidInputSize();
/// @notice Thrown when data is submitted out of order in a large preimage proposal.
error WrongStartingBlock();
/// @notice Thrown when the pre and post states passed aren't contiguous. /// @notice Thrown when the pre and post states passed aren't contiguous.
error StatesNotContiguous(); error StatesNotContiguous();
......
...@@ -233,7 +233,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -233,7 +233,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
// Allocate the calldata so it isn't included in the gas measurement. // Allocate the calldata so it isn't included in the gas measurement.
bytes memory cd = abi.encodeCall(oracle.addLeavesLPP, (TEST_UUID, data, stateCommitments, true)); bytes memory cd = abi.encodeCall(oracle.addLeavesLPP, (TEST_UUID, 0, data, stateCommitments, true));
uint256 gas = gasleft(); uint256 gas = gasleft();
(bool success,) = address(oracle).call(cd); (bool success,) = address(oracle).call(cd);
...@@ -262,7 +262,23 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -262,7 +262,23 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
vm.prank(address(0), address(this)); vm.prank(address(0), address(this));
vm.expectRevert(NotEOA.selector); vm.expectRevert(NotEOA.selector);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
}
/// @notice Tests that the `addLeavesLPP` function reverts when the starting block index is not what is expected.
function test_addLeaves_notContiguous_reverts() public {
// Allocate the preimage data.
bytes memory data = new bytes(136 * 500);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
vm.expectRevert(WrongStartingBlock.selector);
oracle.addLeavesLPP(TEST_UUID, 1, data, stateCommitments, true);
} }
/// @notice Tests that leaves can be added the large preimage proposal mapping and proven to be contained within /// @notice Tests that leaves can be added the large preimage proposal mapping and proven to be contained within
...@@ -294,7 +310,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -294,7 +310,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
commitmentsB[i] = stateCommitments[i + midPoint]; commitmentsB[i] = stateCommitments[i + midPoint];
} }
oracle.addLeavesLPP(TEST_UUID, Bytes.slice(data, 0, 136 * 2), commitmentsA, false); oracle.addLeavesLPP(TEST_UUID, 0, Bytes.slice(data, 0, 136 * 2), commitmentsA, false);
// MetaData assertions // MetaData assertions
LPPMetaData metaData = oracle.proposalMetadata(address(this), TEST_UUID); LPPMetaData metaData = oracle.proposalMetadata(address(this), TEST_UUID);
...@@ -308,7 +324,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -308,7 +324,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Move ahead one block. // Move ahead one block.
vm.roll(block.number + 1); vm.roll(block.number + 1);
oracle.addLeavesLPP(TEST_UUID, Bytes.slice(data, 136 * 2, 136), commitmentsB, true); oracle.addLeavesLPP(TEST_UUID, 2, Bytes.slice(data, 136 * 2, 136), commitmentsB, true);
// MetaData assertions // MetaData assertions
metaData = oracle.proposalMetadata(address(this), TEST_UUID); metaData = oracle.proposalMetadata(address(this), TEST_UUID);
...@@ -328,7 +344,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -328,7 +344,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Should revert if we try to add new leaves. // Should revert if we try to add new leaves.
vm.expectRevert(AlreadyFinalized.selector); vm.expectRevert(AlreadyFinalized.selector);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 4, data, stateCommitments, true);
} }
/// @notice Tests that leaves cannot be added until the large preimage proposal has been initialized. /// @notice Tests that leaves cannot be added until the large preimage proposal has been initialized.
...@@ -342,7 +358,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -342,7 +358,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Allocate the calldata so it isn't included in the gas measurement. // Allocate the calldata so it isn't included in the gas measurement.
vm.expectRevert(NotInitialized.selector); vm.expectRevert(NotInitialized.selector);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
} }
/// @notice Tests that leaves can be added the large preimage proposal mapping and finalized to be added to the /// @notice Tests that leaves can be added the large preimage proposal mapping and finalized to be added to the
...@@ -360,7 +376,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -360,7 +376,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree (2 keccak blocks.) // Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -412,7 +428,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -412,7 +428,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -471,7 +487,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -471,7 +487,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree (2 keccak blocks.) // Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -532,7 +548,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -532,7 +548,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree (2 keccak blocks.) // Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -578,7 +594,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -578,7 +594,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree (2 keccak blocks.) // Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -624,7 +640,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -624,7 +640,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree (2 keccak blocks.) // Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -669,7 +685,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -669,7 +685,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -709,7 +725,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -709,7 +725,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -749,7 +765,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -749,7 +765,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -790,7 +806,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -790,7 +806,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, data, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, data, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -842,7 +858,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -842,7 +858,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -896,7 +912,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -896,7 +912,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
...@@ -950,7 +966,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test { ...@@ -950,7 +966,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Add the leaves to the tree with mismatching state commitments. // Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix; LibKeccak.StateMatrix memory stateMatrix;
bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data); bytes32[] memory stateCommitments = _generateStateCommitments(stateMatrix, data);
oracle.addLeavesLPP(TEST_UUID, phonyData, stateCommitments, true); oracle.addLeavesLPP(TEST_UUID, 0, phonyData, stateCommitments, true);
// Construct the leaf preimage data for the blocks added. // Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix; LibKeccak.StateMatrix memory matrix;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment