From ff5ec9f76e7c4d2424b4839275eaeef3ddaea315 Mon Sep 17 00:00:00 2001 From: Will Hester Date: Thu, 23 May 2024 14:33:24 +0100 Subject: [PATCH] fix merge --- .../ManagementContract.bin | 2 +- .../ManagementContract.json | 123 +++++++++++++++ .../ManagementContract/ManagementContract.go | 147 +++++++++++++++++- .../src/management/ManagementContract.sol | 46 +++++- 4 files changed, 309 insertions(+), 9 deletions(-) diff --git a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin index 830bb1c565..2b56e44c6f 100644 --- a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin +++ b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6132428061009f6000396000f3fe60806040523480156200001157600080fd5b5060043610620001955760003560e01c80638129fc1c11620000e9578063a25eb31c1162000097578063db5d91b1116200006e578063db5d91b114620003ad578063e34fbfc814620003dc578063f2fde38b14620003f157600080fd5b8063a25eb31c146200036e578063a52f433c1462000385578063d4fab887146200039657600080fd5b80638da5cb5b11620000cc5780638da5cb5b146200030357806398077e861462000334578063a1a227fa146200035a57600080fd5b80638129fc1c14620002d25780638236a7ba14620002dc57600080fd5b806368e1038311620001475780636b9707d6116200012a5780636b9707d614620002a7578063715018a614620002be5780637281099614620002c857600080fd5b806368e1038314620002775780636a30d26c146200028e57600080fd5b806343348b2f116200017c57806343348b2f1462000207578063440c953b146200024757806347665738146200026057600080fd5b806303e72e48146200019a5780633e60a22f14620001b3575b600080fd5b620001b1620001ab36600462001763565b62000408565b005b620001ea620001c4366004620017b7565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200023662000218366004620017f8565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001620001fe565b6200025160055481565b604051908152602001620001fe565b620001b162000271366004620017f8565b6200051b565b620001b16200028836600462001869565b620005ef565b62000298620006e6565b604051620001fe919062001947565b620001b1620002b8366004620017f8565b620007c9565b620001b16200088f565b620001b1620008a7565b620001b16200092b565b620002f3620002ed366004620019ad565b62000afc565b604051620001fe929190620019c7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620001ea565b6200034b62000345366004620019ad565b62000bec565b604051620001fe919062001a0d565b600754620001ea906001600160a01b031681565b620001b16200037f36600462001a22565b62000ca1565b600454610100900460ff1662000236565b620001b1620003a736600462001a9a565b62000de5565b62000236620003be366004620017f8565b6001600160a01b031660009081526001602052604090205460ff1690565b620001b1620003ed36600462001b45565b5050565b620001b162000402366004620017f8565b62000f78565b6200041262000fd5565b60006001600160a01b03166003836040516200042f919062001b8b565b908152604051908190036020019020546001600160a01b0316036200048e57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200048c838262001c37565b505b80600383604051620004a1919062001b8b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200050f908490849062001d04565b60405180910390a15050565b6200052562000fd5565b6001600160a01b03811660009081526020819052604090205460ff16620005935760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b60045460ff16156200066a5760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f656400000000000000000000000000000000000000000000000000000000000060648201526084016200058a565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015620007c05783829060005260206000200180546200072c9062001ba9565b80601f01602080910402602001604051908101604052809291908181526020018280546200075a9062001ba9565b8015620007ab5780601f106200077f57610100808354040283529160200191620007ab565b820191906000526020600020905b8154815290600101906020018083116200078d57829003601f168201915b5050505050815260200190600101906200070a565b50505050905090565b620007d362000fd5565b6001600160a01b03811660009081526001602052604090205460ff166200083d5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e6365720000000000000060448201526064016200058a565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479101620005e4565b6200089962000fd5565b620008a560006200104c565b565b620008b162000fd5565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b1580156200091057600080fd5b505af115801562000925573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620009775750825b905060008267ffffffffffffffff166001148015620009955750303b155b905081158015620009a4575080155b15620009dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000a1157845468ff00000000000000001916680100000000000000001785555b62000a1c33620010ca565b600060055560405162000a2f906200168d565b604051809103906000f08015801562000a4c573d6000803e3d6000fd5b506007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a1831562000af557845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001620006d7565b5050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062000b4c9062001ba9565b80601f016020809104026020016040519081016040528092919081815260200182805462000b7a9062001ba9565b801562000bcb5780601f1062000b9f5761010080835404028352916020019162000bcb565b820191906000526020600020905b81548152906001019060200180831162000bad57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6002818154811062000bfd57600080fd5b90600052602060002001600091509050805462000c1a9062001ba9565b80601f016020809104026020016040519081016040528092919081815260200182805462000c489062001ba9565b801562000c995780601f1062000c6d5761010080835404028352916020019162000c99565b820191906000526020600020905b81548152906001019060200180831162000c7b57829003601f168201915b505050505081565b600062000cf3833562000cb8602086018662001d31565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620010df92505050565b6001600160a01b03811660009081526020819052604090205490915060ff1662000d605760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064016200058a565b6001600160a01b03811660009081526001602052604090205460ff1662000dca5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e6365720000000000000060448201526064016200058a565b62000dd5836200110d565b62000de08262001145565b505050565b6001600160a01b03851660009081526020819052604090205460ff168062000e765760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f746564000000000000000000000000000000000000000000000000000000000060648201526084016200058a565b811562000f4d57600062000eaf87878660405160200162000e9a9392919062001d7b565b60405160208183030381529060405262001210565b9050600062000ebf8287620010df565b9050876001600160a01b0316816001600160a01b03161462000f4a5760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d61746368000000000000000000000000000000000000000060648201526084016200058a565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b62000f8262000fd5565b6001600160a01b03811662000fc7576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016200058a565b62000fd2816200104c565b50565b33620010087f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614620008a5576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016200058a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620010d46200124f565b62000fd281620012b7565b600080600080620010f18686620012c1565b92509250925062001103828262001312565b5090949350505050565b8035600090815260066020526040902081906200112b828262001dc3565b50506005546040820135111562000fd25760400135600555565b600062001153828062001ed3565b9050905060005b8181101562000de0576007546001600160a01b0316639730886d62001180858062001ed3565b8481811062001193576200119362001f20565b9050602002810190620011a7919062001f36565b60016040518363ffffffff1660e01b8152600401620011c892919062001fe6565b600060405180830381600087803b158015620011e357600080fd5b505af1158015620011f8573d6000803e3d6000fd5b50505050806200120890620020a8565b90506200115a565b60006200121e825162001428565b8260405160200162001232929190620020d0565b604051602081830303815290604052805190602001209050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16620008a5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000f826200124f565b60008060008351604103620012ff5760208401516040850151606086015160001a620012f088828585620014cf565b9550955095505050506200130b565b50508151600091506002905b9250925092565b60008260038111156200132957620013296200212f565b0362001333575050565b60018260038111156200134a576200134a6200212f565b0362001382576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200139957620013996200212f565b03620013d5576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016200058a565b6003826003811115620013ec57620013ec6200212f565b03620003ed576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016200058a565b606060006200143783620015a3565b600101905060008167ffffffffffffffff8111156200145a576200145a6200169b565b6040519080825280601f01601f19166020018201604052801562001485576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200148f57509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156200150c575060009150600390508262001599565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001561573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166200158f5750600092506001915082905062001599565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620015ed577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106200161a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200163957662386f26fc10000830492506010015b6305f5e100831062001652576305f5e100830492506008015b61271083106200166757612710830492506004015b606483106200167a576064830492506002015b600a831062001687576001015b92915050565b6110c7806200214683390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620016c357600080fd5b813567ffffffffffffffff80821115620016e157620016e16200169b565b604051601f8301601f19908116603f011681019082821181831017156200170c576200170c6200169b565b816040528381528660208588010111156200172657600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b03811681146200175e57600080fd5b919050565b600080604083850312156200177757600080fd5b823567ffffffffffffffff8111156200178f57600080fd5b6200179d85828601620016b1565b925050620017ae6020840162001746565b90509250929050565b600060208284031215620017ca57600080fd5b813567ffffffffffffffff811115620017e257600080fd5b620017f084828501620016b1565b949350505050565b6000602082840312156200180b57600080fd5b620018168262001746565b9392505050565b60008083601f8401126200183057600080fd5b50813567ffffffffffffffff8111156200184957600080fd5b6020830191508360208285010111156200186257600080fd5b9250929050565b6000806000806000606086880312156200188257600080fd5b6200188d8662001746565b9450602086013567ffffffffffffffff80821115620018ab57600080fd5b620018b989838a016200181d565b90965094506040880135915080821115620018d357600080fd5b50620018e2888289016200181d565b969995985093965092949392505050565b60005b8381101562001910578181015183820152602001620018f6565b50506000910152565b6000815180845262001933816020860160208601620018f3565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620019a057603f198886030184526200198d85835162001919565b945092850192908501906001016200196e565b5092979650505050505050565b600060208284031215620019c057600080fd5b5035919050565b8215158152604060208201528151604082015260006020830151606080840152620019f660a084018262001919565b905060408401516080840152809150509392505050565b60208152600062001816602083018462001919565b6000806040838503121562001a3657600080fd5b823567ffffffffffffffff8082111562001a4f57600080fd5b908401906060828703121562001a6457600080fd5b9092506020840135908082111562001a7b57600080fd5b5083016020818603121562001a8f57600080fd5b809150509250929050565b600080600080600060a0868803121562001ab357600080fd5b62001abe8662001746565b945062001ace6020870162001746565b9350604086013567ffffffffffffffff8082111562001aec57600080fd5b62001afa89838a01620016b1565b9450606088013591508082111562001b1157600080fd5b5062001b2088828901620016b1565b9250506080860135801515811462001b3757600080fd5b809150509295509295909350565b6000806020838503121562001b5957600080fd5b823567ffffffffffffffff81111562001b7157600080fd5b62001b7f858286016200181d565b90969095509350505050565b6000825162001b9f818460208701620018f3565b9190910192915050565b600181811c9082168062001bbe57607f821691505b60208210810362001bdf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000de057600081815260208120601f850160051c8101602086101562001c0e5750805b601f850160051c820191505b8181101562001c2f5782815560010162001c1a565b505050505050565b815167ffffffffffffffff81111562001c545762001c546200169b565b62001c6c8162001c65845462001ba9565b8462001be5565b602080601f83116001811462001ca4576000841562001c8b5750858301515b600019600386901b1c1916600185901b17855562001c2f565b600085815260208120601f198616915b8281101562001cd55788860151825594840194600190910190840162001cb4565b508582101562001cf45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001d19604083018562001919565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001d4957600080fd5b83018035915067ffffffffffffffff82111562001d6557600080fd5b6020019150368190038213156200186257600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162001db4816028850160208701620018f3565b91909101602801949350505050565b813581556001808201602080850135601e1986360301811262001de557600080fd5b8501803567ffffffffffffffff81111562001dff57600080fd5b803603838301131562001e1157600080fd5b62001e298162001e22865462001ba9565b8662001be5565b6000601f82116001811462001e62576000831562001e4957508382018501355b600019600385901b1c1916600184901b17865562001ebe565b600086815260209020601f19841690835b8281101562001e945786850188013582559387019390890190870162001e73565b508482101562001eb45760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e1984360301811262001eeb57600080fd5b83018035915067ffffffffffffffff82111562001f0757600080fd5b6020019150600581901b36038213156200186257600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001b9f57600080fd5b803563ffffffff811681146200175e57600080fd5b6000808335601e1984360301811262001f7a57600080fd5b830160208101925035905067ffffffffffffffff81111562001f9b57600080fd5b8036038213156200186257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff811681146200175e57600080fd5b604081526001600160a01b0362001ffd8462001746565b1660408201526000602084013567ffffffffffffffff81168082146200202257600080fd5b60608401525063ffffffff6200203b6040860162001f4d565b1660808301526200204f6060850162001f4d565b63ffffffff1660a083015262002069608085018562001f62565b60c080850152620020806101008501828462001fab565b9150506200209160a0860162001fd4565b60ff1660e084015260209092019290925292915050565b600060018201620020c957634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152600083516200210a81601a850160208801620018f3565b8351908301906200212381601a840160208801620018f3565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611022806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610965565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610965565b610398565b60405190151581526020016101a0565b6101276101e73660046109af565b6103eb565b3480156101f857600080fd5b506101276102073660046109db565b6104d7565b34801561021857600080fd5b50610127610586565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109f8565b61059a565b34801561027557600080fd5b506101276102843660046109af565b6106ec565b34801561029557600080fd5b506102a96102a4366004610a6e565b61079c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109db565b6107f5565b600080826040516020016102f69190610b5a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b5a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b60006104773361084c565b604080513381526001600160a01b0386166020820152348183015267ffffffffffffffff8316606082015290519192507f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6919081900360800190a1505050565b6104df6108aa565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461052c576040519150601f19603f3d011682016040523d82523d6000602084013e610531565b606091505b50509050806105825760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61058e6108aa565b61059860006108f0565b565b6105a26108aa565b60006105ae8242610c5b565b90506000836040516020016105c39190610b5a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561065e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610681908701876109db565b6001600160a01b0316815260208101919091526040016000908120906106ad6080870160608801610c74565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106e48282610e4a565b505050505050565b6106f46108aa565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610741576040519150601f19603f3d011682016040523d82523d6000602084013e610746565b606091505b50509050806107975760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b60006107a73361084c565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107e49796959493929190610f64565b60405180910390a195945050505050565b6107fd6108aa565b6001600160a01b038116610840576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b610849816108f0565b50565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff16916001919061087f8385610fc4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6000546001600160a01b03163314610598576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060c0828403121561095f57600080fd5b50919050565b60006020828403121561097757600080fd5b813567ffffffffffffffff81111561098e57600080fd5b6103e38482850161094d565b6001600160a01b038116811461084957600080fd5b600080604083850312156109c257600080fd5b82356109cd8161099a565b946020939093013593505050565b6000602082840312156109ed57600080fd5b81356103918161099a565b60008060408385031215610a0b57600080fd5b823567ffffffffffffffff811115610a2257600080fd5b610a2e8582860161094d565b95602094909401359450505050565b63ffffffff8116811461084957600080fd5b60ff8116811461084957600080fd5b8035610a6981610a4f565b919050565b600080600080600060808688031215610a8657600080fd5b8535610a9181610a3d565b94506020860135610aa181610a3d565b9350604086013567ffffffffffffffff80821115610abe57600080fd5b818801915088601f830112610ad257600080fd5b813581811115610ae157600080fd5b896020828501011115610af357600080fd5b6020830195508094505050506060860135610b0d81610a4f565b809150509295509295909350565b67ffffffffffffffff8116811461084957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b6b8161099a565b6001600160a01b0381166020840152506020830135610b8981610b1b565b67ffffffffffffffff808216604085015260408501359150610baa82610a3d565b63ffffffff808316606086015260608601359250610bc783610a3d565b80831660808601525060808501359150601e19853603018212610be957600080fd5b6020918501918201913581811115610c0057600080fd5b803603831315610c0f57600080fd5b60c060a0860152610c2460e086018285610b31565b92505050610c3460a08501610a5e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6e57610c6e610c45565b92915050565b600060208284031215610c8657600080fd5b813561039181610a3d565b60008135610c6e81610a3d565b6000808335601e19843603018112610cb557600080fd5b83018035915067ffffffffffffffff821115610cd057600080fd5b602001915036819003821315610ce557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610d1657607f821691505b60208210810361095f57634e487b7160e01b600052602260045260246000fd5b601f82111561079757600081815260208120601f850160051c81016020861015610d5d5750805b601f850160051c820191505b818110156106e457828155600101610d69565b67ffffffffffffffff831115610d9457610d94610cec565b610da883610da28354610d02565b83610d36565b6000601f841160018114610ddc5760008515610dc45750838201355b600019600387901b1c1916600186901b178355610e36565b600083815260209020601f19861690835b82811015610e0d5786850135825560209485019460019092019101610ded565b5086821015610e2a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c6e81610a4f565b8135610e558161099a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e8d81610b1b565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610eeb83610a3d565b921760e09190911b909116178155610f23610f0860608401610c91565b6001830163ffffffff821663ffffffff198254161781555050565b610f306080830183610c9e565b610f3e818360028601610d7c565b5050610582610f4f60a08401610e3d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610fad60c083018587610b31565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fe557610fe5610c45565b509291505056fea2646970667358221220c609dbdd03d0c6e5be1a2cd5db6dd506c7935a73c0335e5f16256a64c6c5fe9164736f6c63430008140033a2646970667358221220fc77f32acf5029f5016f8bb2f56d98daf248ae9b505f3441b5d4f0512deeeb1764736f6c63430008140033 \ No newline at end of file +608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6140f680620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620001d05760003560e01c8063728109961162000101578063a25eb31c11620000a3578063db5d91b1116200007a578063db5d91b11462000446578063e34fbfc81462000475578063e874eb20146200048a578063f2fde38b146200049e57600080fd5b8063a25eb31c1462000407578063a52f433c146200041e578063d4fab887146200042f57600080fd5b80638da5cb5b11620000d85780638da5cb5b146200039c57806398077e8614620003cd578063a1a227fa14620003f357600080fd5b80637281099614620003615780638129fc1c146200036b5780638236a7ba146200037557600080fd5b8063440c953b116200017757806368e10383116200014e57806368e1038314620003105780636a30d26c14620003275780636b9707d61462000340578063715018a6146200035757600080fd5b8063440c953b14620002d85780634766573814620002e25780635371a21614620002f957600080fd5b80633e60a22f11620001ac5780633e60a22f14620002425780633f3f6a18146200029257806343348b2f14620002a957600080fd5b80620ddd2714620001d557806303e72e4814620001f25780632f0cb9e3146200020b575b600080fd5b620001df600a5481565b6040519081526020015b60405180910390f35b620002096200020336600462001bee565b620004b5565b005b620002316200021c36600462001c42565b60096020526000908152604090205460ff1681565b6040519015158152602001620001e9565b620002796200025336600462001c5c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001620001e9565b62000209620002a336600462001ce9565b620005c8565b62000231620002ba36600462001e03565b6001600160a01b031660009081526020819052604090205460ff1690565b620001df60055481565b62000209620002f336600462001e03565b62000852565b620002096200030a36600462001e28565b62000922565b620002096200032136600462001ec2565b62000b2b565b6200033162000c22565b604051620001e9919062001fa0565b620002096200035136600462001e03565b62000d05565b6200020962000dcb565b6200020962000de3565b6200020962000e67565b6200038c6200038636600462001c42565b62001046565b604051620001e992919062002006565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031662000279565b620003e4620003de36600462001c42565b62001136565b604051620001e991906200204c565b60075462000279906001600160a01b031681565b620002096200041836600462002061565b620011eb565b600454610100900460ff1662000231565b6200020962000440366004620020d9565b62001324565b620002316200045736600462001e03565b6001600160a01b031660009081526001602052604090205460ff1690565b620002096200048636600462002184565b5050565b60085462000279906001600160a01b031681565b62000209620004af36600462001e03565b620014b7565b620004bf62001514565b60006001600160a01b0316600383604051620004dc9190620021ca565b908152604051908190036020019020546001600160a01b0316036200053b57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0162000539838262002276565b505b806003836040516200054e9190620021ca565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590620005bc908490849062002343565b60405180910390a15050565b620005d58460ff62002386565b4311156200062a5760405162461bcd60e51b815260206004820152601560248201527f426c6f636b2062696e64696e6720746f6f206f6c64000000000000000000000060448201526064015b60405180910390fd5b8484401462000691576200063e436200158b565b62000649866200158b565b6200065586406200158b565b60405160200162000669939291906200239c565b60408051601f198184030181529082905262461bcd60e51b825262000621916004016200204c565b60006200070387878787604051602001620006b0949392919062002441565b6040516020818303038152906040528051906020012084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200163292505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007705760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b600a87905560005b8451811015620008485760085485516001600160a01b039091169063b6aed0cb90879084908110620007ae57620007ae620024bd565b6020026020010151620007c190620024d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152426024820152604401600060405180830381600087803b1580156200081957600080fd5b505af11580156200082e573d6000803e3d6000fd5b5050505080806200083f90620024f8565b91505062000778565b5050505050505050565b6200085c62001514565b6001600160a01b03811660009081526020819052604090205460ff16620008c65760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b6008546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906200097390879087908790879060040162002574565b60006040518083038186803b1580156200098c57600080fd5b505afa158015620009a1573d6000803e3d6000fd5b50505050600084604051602001620009ba9190620025dc565b60408051601f1981840301815291815281516020928301206000818152600990935291205490915060ff161562000a345760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20616c7265616479207370656e740000000000000000604482015260640162000621565b6001600960008760405160200162000a4d9190620025dc565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff1916931515939093179092556007546001600160a01b0316916399a3ad219162000aa89190890190890162001e03565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301528801356024820152604401600060405180830381600087803b15801562000b0b57600080fd5b505af115801562000b20573d6000803e3d6000fd5b505050505050505050565b60045460ff161562000ba65760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840162000621565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000cfc57838290600052602060002001805462000c6890620021e8565b80601f016020809104026020016040519081016040528092919081815260200182805462000c9690620021e8565b801562000ce75780601f1062000cbb5761010080835404028352916020019162000ce7565b820191906000526020600020905b81548152906001019060200180831162000cc957829003601f168201915b50505050508152602001906001019062000c46565b50505050905090565b62000d0f62001514565b6001600160a01b03811660009081526001602052604090205460ff1662000d795760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000621565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47910162000917565b62000dd562001514565b62000de1600062001662565b565b62000ded62001514565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b15801562000e4c57600080fd5b505af115801562000e61573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000eb35750825b905060008267ffffffffffffffff16600114801562000ed15750303b155b90508115801562000ee0575080155b1562000f18576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000f4d57845468ff00000000000000001916680100000000000000001785555b62000f5833620016e0565b600060055560405162000f6b9062001b02565b604051809103906000f08015801562000f88573d6000803e3d6000fd5b506008805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039390931692831790915560078054909116821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200103f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200162000c13565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200109690620021e8565b80601f0160208091040260200160405190810160405280929190818152602001828054620010c490620021e8565b8015620011155780601f10620010e95761010080835404028352916020019162001115565b820191906000526020600020905b815481529060010190602001808311620010f757829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b600281815481106200114757600080fd5b9060005260206000200160009150905080546200116490620021e8565b80601f01602080910402602001604051908101604052809291908181526020018280546200119290620021e8565b8015620011e35780601f10620011b757610100808354040283529160200191620011e3565b820191906000526020600020905b815481529060010190602001808311620011c557829003601f168201915b505050505081565b60006200123d8335620012026020860186620025ec565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200163292505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620012aa5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b6001600160a01b03811660009081526001602052604090205460ff16620013145760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000621565b6200131f83620016f5565b505050565b6001600160a01b03851660009081526020819052604090205460ff1680620013b55760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f7465640000000000000000000000000000000000000000000000000000000000606482015260840162000621565b81156200148c576000620013ee878786604051602001620013d99392919062002636565b6040516020818303038152906040526200172d565b90506000620013fe828762001632565b9050876001600160a01b0316816001600160a01b031614620014895760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d617463680000000000000000000000000000000000000000606482015260840162000621565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b620014c162001514565b6001600160a01b03811662001506576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240162000621565b620015118162001662565b50565b33620015477f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000de1576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240162000621565b606060006200159a836200176c565b600101905060008167ffffffffffffffff811115620015bd57620015bd62001b10565b6040519080825280601f01601f191660200182016040528015620015e8576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084620015f257509392505050565b60008060008062001644868662001855565b925092509250620016568282620018a6565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620016ea620019bc565b620015118162001a24565b8035600090815260066020526040902081906200171382826200267e565b505060055460408201351115620015115760400135600555565b60006200173b82516200158b565b826040516020016200174f9291906200278e565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620017b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310620017e3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200180257662386f26fc10000830492506010015b6305f5e10083106200181b576305f5e100830492506008015b61271083106200183057612710830492506004015b6064831062001843576064830492506002015b600a83106200165c5760010192915050565b60008060008351604103620018935760208401516040850151606086015160001a620018848882858562001a2e565b9550955095505050506200189f565b50508151600091506002905b9250925092565b6000826003811115620018bd57620018bd620027ed565b03620018c7575050565b6001826003811115620018de57620018de620027ed565b0362001916576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200192d576200192d620027ed565b0362001969576040517ffce698f70000000000000000000000000000000000000000000000000000000081526004810182905260240162000621565b6003826003811115620019805762001980620027ed565b0362000486576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240162000621565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000de1576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620014c1620019bc565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001a6b575060009150600390508262001af8565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001ac0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001aee5750600092506001915082905062001af8565b9250600091508190505b9450945094915050565b6118bd806200280483390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562001b525762001b5262001b10565b604052919050565b600082601f83011262001b6c57600080fd5b813567ffffffffffffffff81111562001b895762001b8962001b10565b62001b9e601f8201601f191660200162001b26565b81815284602083860101111562001bb457600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811462001be957600080fd5b919050565b6000806040838503121562001c0257600080fd5b823567ffffffffffffffff81111562001c1a57600080fd5b62001c288582860162001b5a565b92505062001c396020840162001bd1565b90509250929050565b60006020828403121562001c5557600080fd5b5035919050565b60006020828403121562001c6f57600080fd5b813567ffffffffffffffff81111562001c8757600080fd5b62001c958482850162001b5a565b949350505050565b60008083601f84011262001cb057600080fd5b50813567ffffffffffffffff81111562001cc957600080fd5b60208301915083602082850101111562001ce257600080fd5b9250929050565b60008060008060008060a0878903121562001d0357600080fd5b86359550602080880135955060408801359450606088013567ffffffffffffffff8082111562001d3257600080fd5b818a0191508a601f83011262001d4757600080fd5b81358181111562001d5c5762001d5c62001b10565b8060051b62001d6d85820162001b26565b918252838101850191858101908e84111562001d8857600080fd5b86860192505b8383101562001dc757848335111562001da657600080fd5b62001db78f88853589010162001b5a565b8252918601919086019062001d8e565b985050505060808a013592508083111562001de157600080fd5b505062001df189828a0162001c9d565b979a9699509497509295939492505050565b60006020828403121562001e1657600080fd5b62001e218262001bd1565b9392505050565b60008060008084860360c081121562001e4057600080fd5b608081121562001e4f57600080fd5b50849350608085013567ffffffffffffffff8082111562001e6f57600080fd5b818701915087601f83011262001e8457600080fd5b81358181111562001e9457600080fd5b8860208260051b850101111562001eaa57600080fd5b95986020929092019750949560a00135945092505050565b60008060008060006060868803121562001edb57600080fd5b62001ee68662001bd1565b9450602086013567ffffffffffffffff8082111562001f0457600080fd5b62001f1289838a0162001c9d565b9096509450604088013591508082111562001f2c57600080fd5b5062001f3b8882890162001c9d565b969995985093965092949392505050565b60005b8381101562001f6957818101518382015260200162001f4f565b50506000910152565b6000815180845262001f8c81602086016020860162001f4c565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562001ff957603f1988860301845262001fe685835162001f72565b9450928501929085019060010162001fc7565b5092979650505050505050565b82151581526040602082015281516040820152600060208301516060808401526200203560a084018262001f72565b905060408401516080840152809150509392505050565b60208152600062001e21602083018462001f72565b600080604083850312156200207557600080fd5b823567ffffffffffffffff808211156200208e57600080fd5b9084019060608287031215620020a357600080fd5b90925060208401359080821115620020ba57600080fd5b50830160208186031215620020ce57600080fd5b809150509250929050565b600080600080600060a08688031215620020f257600080fd5b620020fd8662001bd1565b94506200210d6020870162001bd1565b9350604086013567ffffffffffffffff808211156200212b57600080fd5b6200213989838a0162001b5a565b945060608801359150808211156200215057600080fd5b506200215f8882890162001b5a565b925050608086013580151581146200217657600080fd5b809150509295509295909350565b600080602083850312156200219857600080fd5b823567ffffffffffffffff811115620021b057600080fd5b620021be8582860162001c9d565b90969095509350505050565b60008251620021de81846020870162001f4c565b9190910192915050565b600181811c90821680620021fd57607f821691505b6020821081036200221e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200131f57600081815260208120601f850160051c810160208610156200224d5750805b601f850160051c820191505b818110156200226e5782815560010162002259565b505050505050565b815167ffffffffffffffff81111562002293576200229362001b10565b620022ab81620022a48454620021e8565b8462002224565b602080601f831160018114620022e35760008415620022ca5750858301515b600019600386901b1c1916600185901b1785556200226e565b600085815260208120601f198616915b828110156200231457888601518255948401946001909101908401620022f3565b5085821015620023335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062002358604083018562001f72565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200165c576200165c62002370565b7f496e76616c696420626c6f636b2062696e64696e673a00000000000000000000815260008451620023d681601685016020890162001f4c565b80830190507f3a00000000000000000000000000000000000000000000000000000000000000806016830152855162002417816017850160208a0162001f4c565b601792019182015283516200243481601884016020880162001f4c565b0160180195945050505050565b600060808201868352602086818501528560408501526080606085015281855180845260a08601915060a08160051b870101935082870160005b82811015620024ad57609f198887030184526200249a86835162001f72565b955092840192908401906001016200247b565b50939a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156200221e5760001960209190910360031b1b16919050565b6000600182016200250d576200250d62002370565b5060010190565b6001600160a01b0380620025288362001bd1565b168352806200253a6020840162001bd1565b1660208401525060408101356040830152606081013567ffffffffffffffff81168082146200256857600080fd5b80606085015250505050565b62002580818662002514565b60c060808201528260c082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115620025bd57600080fd5b8360051b808660e085013760a0830193909352500160e0019392505050565b608081016200165c828462002514565b6000808335601e198436030181126200260457600080fd5b83018035915067ffffffffffffffff8211156200262057600080fd5b60200191503681900382131562001ce257600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b1660148401525082516200266f81602885016020870162001f4c565b91909101602801949350505050565b813581556001808201602080850135601e19863603018112620026a057600080fd5b8501803567ffffffffffffffff811115620026ba57600080fd5b8036038383011315620026cc57600080fd5b620026e481620026dd8654620021e8565b8662002224565b6000601f8211600181146200271d57600083156200270457508382018501355b600019600385901b1c1916600184901b17865562002779565b600086815260209020601f19841690835b828110156200274f578685018801358255938701939089019087016200272e565b50848210156200276f5760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351620027c881601a85016020880162001f4c565b835190830190620027e181601a84016020880162001f4c565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611818806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f81565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fb6565b610428565b34801561020157600080fd5b50610215610210366004610f81565b61049e565b60405190151581526020016101cc565b610153610233366004610fe4565b6104f1565b34801561024457600080fd5b50610153610253366004611010565b6105dd565b34801561026457600080fd5b5061015361068c565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b036600461102d565b6106a0565b3480156102c157600080fd5b506101536102d0366004610fe4565b6107f2565b3480156102e157600080fd5b506102f56102f03660046110a3565b6108a2565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b5061015361032936600461119c565b6108fb565b34801561033a57600080fd5b506101536103493660046111fe565b610afd565b34801561035a57600080fd5b50610153610369366004611220565b610b99565b34801561037a57600080fd5b50610153610389366004611010565b610d79565b600080826040516020016103a291906112cf565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dd0565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112cf565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e16565b604080513381526001600160a01b0386166020820152348183015267ffffffffffffffff8316606082015290519192507f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6919081900360800190a1505050565b6105e5610dd0565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b50509050806106885760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b610694610dd0565b61069e6000610e74565b565b6106a8610dd0565b60006106b482426113d0565b90506000836040516020016106c991906112cf565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156107645760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061078790870187611010565b6001600160a01b0316815260208101919091526040016000908120906107b360808701606088016113e3565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107ea82826115b1565b505050505050565b6107fa610dd0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610847576040519150601f19603f3d011682016040523d82523d6000602084013e61084c565b606091505b505090508061089d5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108ad33610e16565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516108ea97969594939291906116cb565b60405180910390a195945050505050565b600081815260046020526040812054900361096b5760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109d35760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109e6919061172b565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a8484848484604051602001610a6991815260200190565b60405160208183030381529060405280519060200120610ed1565b610af65760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610b05610dd0565b60008281526004602052604090205415610b875760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c095760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c715760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c8491906112cf565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610d0784848484604051602001610a6991815260200190565b610af65760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d81610dd0565b6001600160a01b038116610dc4576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dcd81610e74565b50565b6000546001600160a01b0316331461069e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e49838561178b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610edf868685610ee9565b1495945050505050565b600081815b84811015610f2c57610f1882878784818110610f0c57610f0c6117b3565b90506020020135610f35565b915080610f24816117c9565b915050610eee565b50949350505050565b6000818310610f51576000828152602084905260409020610f60565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7b57600080fd5b50919050565b600060208284031215610f9357600080fd5b813567ffffffffffffffff811115610faa57600080fd5b6104e984828501610f69565b600060208284031215610fc857600080fd5b5035919050565b6001600160a01b0381168114610dcd57600080fd5b60008060408385031215610ff757600080fd5b823561100281610fcf565b946020939093013593505050565b60006020828403121561102257600080fd5b813561042181610fcf565b6000806040838503121561104057600080fd5b823567ffffffffffffffff81111561105757600080fd5b61106385828601610f69565b95602094909401359450505050565b63ffffffff81168114610dcd57600080fd5b60ff81168114610dcd57600080fd5b803561109e81611084565b919050565b6000806000806000608086880312156110bb57600080fd5b85356110c681611072565b945060208601356110d681611072565b9350604086013567ffffffffffffffff808211156110f357600080fd5b818801915088601f83011261110757600080fd5b81358181111561111657600080fd5b89602082850101111561112857600080fd5b602083019550809450505050606086013561114281611084565b809150509295509295909350565b60008083601f84011261116257600080fd5b50813567ffffffffffffffff81111561117a57600080fd5b6020830191508360208260051b850101111561119557600080fd5b9250929050565b60008060008084860360c08112156111b357600080fd5b60808112156111c157600080fd5b50849350608085013567ffffffffffffffff8111156111df57600080fd5b6111eb87828801611150565b9598909750949560a00135949350505050565b6000806040838503121561121157600080fd5b50508035926020909101359150565b6000806000806060858703121561123657600080fd5b843567ffffffffffffffff8082111561124e57600080fd5b61125a88838901610f69565b9550602087013591508082111561127057600080fd5b5061127d87828801611150565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dcd57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112e081610fcf565b6001600160a01b03811660208401525060208301356112fe81611290565b67ffffffffffffffff80821660408501526040850135915061131f82611072565b63ffffffff80831660608601526060860135925061133c83611072565b80831660808601525060808501359150601e1985360301821261135e57600080fd5b602091850191820191358181111561137557600080fd5b80360383131561138457600080fd5b60c060a086015261139960e0860182856112a6565b925050506113a960a08501611093565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f6357610f636113ba565b6000602082840312156113f557600080fd5b813561042181611072565b60008135610f6381611072565b6000808335601e1984360301811261142457600080fd5b83018035915067ffffffffffffffff82111561143f57600080fd5b60200191503681900382131561119557600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147e57607f821691505b602082108103610f7b57634e487b7160e01b600052602260045260246000fd5b601f82111561089d57600081815260208120601f850160051c810160208610156114c55750805b601f850160051c820191505b818110156107ea578281556001016114d1565b67ffffffffffffffff8311156114fc576114fc611454565b6115108361150a835461146a565b8361149e565b6000601f841160018114611544576000851561152c5750838201355b600019600387901b1c1916600186901b178355610af6565b600083815260209020601f19861690835b828110156115755786850135825560209485019460019092019101611555565b50868210156115925760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f6381611084565b81356115bc81610fcf565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115f481611290565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061165283611072565b921760e09190911b90911617815561168a61166f60608401611400565b6001830163ffffffff821663ffffffff198254161781555050565b611697608083018361140d565b6116a58183600286016114e4565b50506106886116b660a084016115a4565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c0608083015261171460c0830185876112a6565b905060ff831660a083015298975050505050505050565b60808101823561173a81610fcf565b6001600160a01b03908116835260208401359061175682610fcf565b16602083015260408381013590830152606083013561177481611290565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff8181168382160190808211156117ac576117ac6113ba565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117db576117db6113ba565b506001019056fea2646970667358221220234a0ac859b049fc8a6781a41d5624f2b46a4b36b8dcb6a0661b3e290940f49464736f6c63430008140033a26469706673582212207ff1877a225a79cfb46cc7dddab6257222043013c1e075a2de47d54e06ad473864736f6c63430008140033 \ No newline at end of file diff --git a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json index 413b85d4e3..c962333812 100644 --- a/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json +++ b/contracts/exported/src/management/ManagementContract.sol/ManagementContract.json @@ -246,6 +246,51 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "sequence", + "type": "uint64" + } + ], + "internalType": "struct Structs.ValueTransferMessage", + "name": "_msg", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "ExtractNativeValue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "GetImportantContractKeys", @@ -452,6 +497,39 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_lastBatchHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "blockHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "blockNum", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "crossChainHashes", + "type": "bytes[]" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "name": "addCrossChainMessagesRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -497,6 +575,38 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "isWithdrawalSpent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastBatchHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "lastBatchSeqNo", @@ -510,6 +620,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "merkleMessageBus", + "outputs": [ + { + "internalType": "contract IMerkleTreeMessageBus", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "messageBus", diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 35c4a14229..4c18dd573c 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -51,10 +51,18 @@ type StructsMetaRollup struct { LastSequenceNumber *big.Int } +// StructsValueTransferMessage is an auto generated low-level Go binding around an user-defined struct. +type StructsValueTransferMessage struct { + Sender common.Address + Receiver common.Address + Amount *big.Int + Sequence uint64 +} + // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"crossChainData\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6132428061009f6000396000f3fe60806040523480156200001157600080fd5b5060043610620001955760003560e01c80638129fc1c11620000e9578063a25eb31c1162000097578063db5d91b1116200006e578063db5d91b114620003ad578063e34fbfc814620003dc578063f2fde38b14620003f157600080fd5b8063a25eb31c146200036e578063a52f433c1462000385578063d4fab887146200039657600080fd5b80638da5cb5b11620000cc5780638da5cb5b146200030357806398077e861462000334578063a1a227fa146200035a57600080fd5b80638129fc1c14620002d25780638236a7ba14620002dc57600080fd5b806368e1038311620001475780636b9707d6116200012a5780636b9707d614620002a7578063715018a614620002be5780637281099614620002c857600080fd5b806368e1038314620002775780636a30d26c146200028e57600080fd5b806343348b2f116200017c57806343348b2f1462000207578063440c953b146200024757806347665738146200026057600080fd5b806303e72e48146200019a5780633e60a22f14620001b3575b600080fd5b620001b1620001ab36600462001763565b62000408565b005b620001ea620001c4366004620017b7565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200023662000218366004620017f8565b6001600160a01b031660009081526020819052604090205460ff1690565b6040519015158152602001620001fe565b6200025160055481565b604051908152602001620001fe565b620001b162000271366004620017f8565b6200051b565b620001b16200028836600462001869565b620005ef565b62000298620006e6565b604051620001fe919062001947565b620001b1620002b8366004620017f8565b620007c9565b620001b16200088f565b620001b1620008a7565b620001b16200092b565b620002f3620002ed366004620019ad565b62000afc565b604051620001fe929190620019c7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620001ea565b6200034b62000345366004620019ad565b62000bec565b604051620001fe919062001a0d565b600754620001ea906001600160a01b031681565b620001b16200037f36600462001a22565b62000ca1565b600454610100900460ff1662000236565b620001b1620003a736600462001a9a565b62000de5565b62000236620003be366004620017f8565b6001600160a01b031660009081526001602052604090205460ff1690565b620001b1620003ed36600462001b45565b5050565b620001b162000402366004620017f8565b62000f78565b6200041262000fd5565b60006001600160a01b03166003836040516200042f919062001b8b565b908152604051908190036020019020546001600160a01b0316036200048e57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200048c838262001c37565b505b80600383604051620004a1919062001b8b565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb5906200050f908490849062001d04565b60405180910390a15050565b6200052562000fd5565b6001600160a01b03811660009081526020819052604090205460ff16620005935760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b60045460ff16156200066a5760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f656400000000000000000000000000000000000000000000000000000000000060648201526084016200058a565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015620007c05783829060005260206000200180546200072c9062001ba9565b80601f01602080910402602001604051908101604052809291908181526020018280546200075a9062001ba9565b8015620007ab5780601f106200077f57610100808354040283529160200191620007ab565b820191906000526020600020905b8154815290600101906020018083116200078d57829003601f168201915b5050505050815260200190600101906200070a565b50505050905090565b620007d362000fd5565b6001600160a01b03811660009081526001602052604090205460ff166200083d5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e6365720000000000000060448201526064016200058a565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b479101620005e4565b6200089962000fd5565b620008a560006200104c565b565b620008b162000fd5565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b1580156200091057600080fd5b505af115801562000925573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620009775750825b905060008267ffffffffffffffff166001148015620009955750303b155b905081158015620009a4575080155b15620009dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000a1157845468ff00000000000000001916680100000000000000001785555b62000a1c33620010ca565b600060055560405162000a2f906200168d565b604051809103906000f08015801562000a4c573d6000803e3d6000fd5b506007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a1831562000af557845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001620006d7565b5050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062000b4c9062001ba9565b80601f016020809104026020016040519081016040528092919081815260200182805462000b7a9062001ba9565b801562000bcb5780601f1062000b9f5761010080835404028352916020019162000bcb565b820191906000526020600020905b81548152906001019060200180831162000bad57829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b6002818154811062000bfd57600080fd5b90600052602060002001600091509050805462000c1a9062001ba9565b80601f016020809104026020016040519081016040528092919081815260200182805462000c489062001ba9565b801562000c995780601f1062000c6d5761010080835404028352916020019162000c99565b820191906000526020600020905b81548152906001019060200180831162000c7b57829003601f168201915b505050505081565b600062000cf3833562000cb8602086018662001d31565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620010df92505050565b6001600160a01b03811660009081526020819052604090205490915060ff1662000d605760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f742061747465737465640000000000000000000060448201526064016200058a565b6001600160a01b03811660009081526001602052604090205460ff1662000dca5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e6365720000000000000060448201526064016200058a565b62000dd5836200110d565b62000de08262001145565b505050565b6001600160a01b03851660009081526020819052604090205460ff168062000e765760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f746564000000000000000000000000000000000000000000000000000000000060648201526084016200058a565b811562000f4d57600062000eaf87878660405160200162000e9a9392919062001d7b565b60405160208183030381529060405262001210565b9050600062000ebf8287620010df565b9050876001600160a01b0316816001600160a01b03161462000f4a5760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d61746368000000000000000000000000000000000000000060648201526084016200058a565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b62000f8262000fd5565b6001600160a01b03811662000fc7576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016200058a565b62000fd2816200104c565b50565b33620010087f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614620008a5576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016200058a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620010d46200124f565b62000fd281620012b7565b600080600080620010f18686620012c1565b92509250925062001103828262001312565b5090949350505050565b8035600090815260066020526040902081906200112b828262001dc3565b50506005546040820135111562000fd25760400135600555565b600062001153828062001ed3565b9050905060005b8181101562000de0576007546001600160a01b0316639730886d62001180858062001ed3565b8481811062001193576200119362001f20565b9050602002810190620011a7919062001f36565b60016040518363ffffffff1660e01b8152600401620011c892919062001fe6565b600060405180830381600087803b158015620011e357600080fd5b505af1158015620011f8573d6000803e3d6000fd5b50505050806200120890620020a8565b90506200115a565b60006200121e825162001428565b8260405160200162001232929190620020d0565b604051602081830303815290604052805190602001209050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16620008a5576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000f826200124f565b60008060008351604103620012ff5760208401516040850151606086015160001a620012f088828585620014cf565b9550955095505050506200130b565b50508151600091506002905b9250925092565b60008260038111156200132957620013296200212f565b0362001333575050565b60018260038111156200134a576200134a6200212f565b0362001382576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200139957620013996200212f565b03620013d5576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016200058a565b6003826003811115620013ec57620013ec6200212f565b03620003ed576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016200058a565b606060006200143783620015a3565b600101905060008167ffffffffffffffff8111156200145a576200145a6200169b565b6040519080825280601f01601f19166020018201604052801562001485576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846200148f57509392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156200150c575060009150600390508262001599565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001561573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166200158f5750600092506001915082905062001599565b9250600091508190505b9450945094915050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620015ed577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106200161a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200163957662386f26fc10000830492506010015b6305f5e100831062001652576305f5e100830492506008015b61271083106200166757612710830492506004015b606483106200167a576064830492506002015b600a831062001687576001015b92915050565b6110c7806200214683390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620016c357600080fd5b813567ffffffffffffffff80821115620016e157620016e16200169b565b604051601f8301601f19908116603f011681019082821181831017156200170c576200170c6200169b565b816040528381528660208588010111156200172657600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160a01b03811681146200175e57600080fd5b919050565b600080604083850312156200177757600080fd5b823567ffffffffffffffff8111156200178f57600080fd5b6200179d85828601620016b1565b925050620017ae6020840162001746565b90509250929050565b600060208284031215620017ca57600080fd5b813567ffffffffffffffff811115620017e257600080fd5b620017f084828501620016b1565b949350505050565b6000602082840312156200180b57600080fd5b620018168262001746565b9392505050565b60008083601f8401126200183057600080fd5b50813567ffffffffffffffff8111156200184957600080fd5b6020830191508360208285010111156200186257600080fd5b9250929050565b6000806000806000606086880312156200188257600080fd5b6200188d8662001746565b9450602086013567ffffffffffffffff80821115620018ab57600080fd5b620018b989838a016200181d565b90965094506040880135915080821115620018d357600080fd5b50620018e2888289016200181d565b969995985093965092949392505050565b60005b8381101562001910578181015183820152602001620018f6565b50506000910152565b6000815180845262001933816020860160208601620018f3565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015620019a057603f198886030184526200198d85835162001919565b945092850192908501906001016200196e565b5092979650505050505050565b600060208284031215620019c057600080fd5b5035919050565b8215158152604060208201528151604082015260006020830151606080840152620019f660a084018262001919565b905060408401516080840152809150509392505050565b60208152600062001816602083018462001919565b6000806040838503121562001a3657600080fd5b823567ffffffffffffffff8082111562001a4f57600080fd5b908401906060828703121562001a6457600080fd5b9092506020840135908082111562001a7b57600080fd5b5083016020818603121562001a8f57600080fd5b809150509250929050565b600080600080600060a0868803121562001ab357600080fd5b62001abe8662001746565b945062001ace6020870162001746565b9350604086013567ffffffffffffffff8082111562001aec57600080fd5b62001afa89838a01620016b1565b9450606088013591508082111562001b1157600080fd5b5062001b2088828901620016b1565b9250506080860135801515811462001b3757600080fd5b809150509295509295909350565b6000806020838503121562001b5957600080fd5b823567ffffffffffffffff81111562001b7157600080fd5b62001b7f858286016200181d565b90969095509350505050565b6000825162001b9f818460208701620018f3565b9190910192915050565b600181811c9082168062001bbe57607f821691505b60208210810362001bdf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000de057600081815260208120601f850160051c8101602086101562001c0e5750805b601f850160051c820191505b8181101562001c2f5782815560010162001c1a565b505050505050565b815167ffffffffffffffff81111562001c545762001c546200169b565b62001c6c8162001c65845462001ba9565b8462001be5565b602080601f83116001811462001ca4576000841562001c8b5750858301515b600019600386901b1c1916600185901b17855562001c2f565b600085815260208120601f198616915b8281101562001cd55788860151825594840194600190910190840162001cb4565b508582101562001cf45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062001d19604083018562001919565b90506001600160a01b03831660208301529392505050565b6000808335601e1984360301811262001d4957600080fd5b83018035915067ffffffffffffffff82111562001d6557600080fd5b6020019150368190038213156200186257600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162001db4816028850160208701620018f3565b91909101602801949350505050565b813581556001808201602080850135601e1986360301811262001de557600080fd5b8501803567ffffffffffffffff81111562001dff57600080fd5b803603838301131562001e1157600080fd5b62001e298162001e22865462001ba9565b8662001be5565b6000601f82116001811462001e62576000831562001e4957508382018501355b600019600385901b1c1916600184901b17865562001ebe565b600086815260209020601f19841690835b8281101562001e945786850188013582559387019390890190870162001e73565b508482101562001eb45760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b6000808335601e1984360301811262001eeb57600080fd5b83018035915067ffffffffffffffff82111562001f0757600080fd5b6020019150600581901b36038213156200186257600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811262001b9f57600080fd5b803563ffffffff811681146200175e57600080fd5b6000808335601e1984360301811262001f7a57600080fd5b830160208101925035905067ffffffffffffffff81111562001f9b57600080fd5b8036038213156200186257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b803560ff811681146200175e57600080fd5b604081526001600160a01b0362001ffd8462001746565b1660408201526000602084013567ffffffffffffffff81168082146200202257600080fd5b60608401525063ffffffff6200203b6040860162001f4d565b1660808301526200204f6060850162001f4d565b63ffffffff1660a083015262002069608085018562001f62565b60c080850152620020806101008501828462001fab565b9150506200209160a0860162001fd4565b60ff1660e084015260209092019290925292915050565b600060018201620020c957634e487b7160e01b600052601160045260246000fd5b5060010190565b7f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152600083516200210a81601a850160208801620018f3565b8351908301906200212381601a840160208801620018f3565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611022806100a56000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b1161006957806399a3ad211161004e57806399a3ad2114610269578063b1454caa14610289578063f2fde38b146102c257610129565b80638da5cb5b146102215780639730886d1461024957610129565b8063346633fb1161009a578063346633fb146101d957806336d2da90146101ec578063715018a61461020c57610129565b80630fcfbd111461017657806333a88c72146101a957610129565b36610129576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561011357600080fd5b505af1158015610127573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b34801561018257600080fd5b50610196610191366004610965565b6102e2565b6040519081526020015b60405180910390f35b3480156101b557600080fd5b506101c96101c4366004610965565b610398565b60405190151581526020016101a0565b6101276101e73660046109af565b6103eb565b3480156101f857600080fd5b506101276102073660046109db565b6104d7565b34801561021857600080fd5b50610127610586565b34801561022d57600080fd5b506000546040516001600160a01b0390911681526020016101a0565b34801561025557600080fd5b506101276102643660046109f8565b61059a565b34801561027557600080fd5b506101276102843660046109af565b6106ec565b34801561029557600080fd5b506102a96102a4366004610a6e565b61079c565b60405167ffffffffffffffff90911681526020016101a0565b3480156102ce57600080fd5b506101276102dd3660046109db565b6107f5565b600080826040516020016102f69190610b5a565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806103915760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d697474656460448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b9392505050565b600080826040516020016103ac9190610b5a565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906103e35750428111155b949350505050565b6000341180156103fa57508034145b61046c5760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e6720457468657200000000000000000000000000000000606482015260840161016d565b60006104773361084c565b604080513381526001600160a01b0386166020820152348183015267ffffffffffffffff8316606082015290519192507f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6919081900360800190a1505050565b6104df6108aa565b6000816001600160a01b03164760405160006040518083038185875af1925050503d806000811461052c576040519150601f19603f3d011682016040523d82523d6000602084013e610531565b606091505b50509050806105825760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b5050565b61058e6108aa565b61059860006108f0565b565b6105a26108aa565b60006105ae8242610c5b565b90506000836040516020016105c39190610b5a565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561065e5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f2100000000000000000000000000000000000000000000000000000000000000606482015260840161016d565b6000818152600160209081526040822084905560029190610681908701876109db565b6001600160a01b0316815260208101919091526040016000908120906106ad6080870160608801610c74565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016106e48282610e4a565b505050505050565b6106f46108aa565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610741576040519150601f19603f3d011682016040523d82523d6000602084013e610746565b606091505b50509050806107975760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c7565000000000000000000000000604482015260640161016d565b505050565b60006107a73361084c565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516107e49796959493929190610f64565b60405180910390a195945050505050565b6107fd6108aa565b6001600160a01b038116610840576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161016d565b610849816108f0565b50565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff16916001919061087f8385610fc4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b6000546001600160a01b03163314610598576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161016d565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060c0828403121561095f57600080fd5b50919050565b60006020828403121561097757600080fd5b813567ffffffffffffffff81111561098e57600080fd5b6103e38482850161094d565b6001600160a01b038116811461084957600080fd5b600080604083850312156109c257600080fd5b82356109cd8161099a565b946020939093013593505050565b6000602082840312156109ed57600080fd5b81356103918161099a565b60008060408385031215610a0b57600080fd5b823567ffffffffffffffff811115610a2257600080fd5b610a2e8582860161094d565b95602094909401359450505050565b63ffffffff8116811461084957600080fd5b60ff8116811461084957600080fd5b8035610a6981610a4f565b919050565b600080600080600060808688031215610a8657600080fd5b8535610a9181610a3d565b94506020860135610aa181610a3d565b9350604086013567ffffffffffffffff80821115610abe57600080fd5b818801915088601f830112610ad257600080fd5b813581811115610ae157600080fd5b896020828501011115610af357600080fd5b6020830195508094505050506060860135610b0d81610a4f565b809150509295509295909350565b67ffffffffffffffff8116811461084957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235610b6b8161099a565b6001600160a01b0381166020840152506020830135610b8981610b1b565b67ffffffffffffffff808216604085015260408501359150610baa82610a3d565b63ffffffff808316606086015260608601359250610bc783610a3d565b80831660808601525060808501359150601e19853603018212610be957600080fd5b6020918501918201913581811115610c0057600080fd5b803603831315610c0f57600080fd5b60c060a0860152610c2460e086018285610b31565b92505050610c3460a08501610a5e565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6e57610c6e610c45565b92915050565b600060208284031215610c8657600080fd5b813561039181610a3d565b60008135610c6e81610a3d565b6000808335601e19843603018112610cb557600080fd5b83018035915067ffffffffffffffff821115610cd057600080fd5b602001915036819003821315610ce557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610d1657607f821691505b60208210810361095f57634e487b7160e01b600052602260045260246000fd5b601f82111561079757600081815260208120601f850160051c81016020861015610d5d5750805b601f850160051c820191505b818110156106e457828155600101610d69565b67ffffffffffffffff831115610d9457610d94610cec565b610da883610da28354610d02565b83610d36565b6000601f841160018114610ddc5760008515610dc45750838201355b600019600387901b1c1916600186901b178355610e36565b600083815260209020601f19861690835b82811015610e0d5786850135825560209485019460019092019101610ded565b5086821015610e2a5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008135610c6e81610a4f565b8135610e558161099a565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff1982161783556020840135610e8d81610b1b565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff0000000000000000000000000000000000000000000000000000000081848285161717855560408601359250610eeb83610a3d565b921760e09190911b909116178155610f23610f0860608401610c91565b6001830163ffffffff821663ffffffff198254161781555050565b610f306080830183610c9e565b610f3e818360028601610d7c565b5050610582610f4f60a08401610e3d565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c06080830152610fad60c083018587610b31565b905060ff831660a083015298975050505050505050565b67ffffffffffffffff818116838216019080821115610fe557610fe5610c45565b509291505056fea2646970667358221220c609dbdd03d0c6e5be1a2cd5db6dd506c7935a73c0335e5f16256a64c6c5fe9164736f6c63430008140033a2646970667358221220fc77f32acf5029f5016f8bb2f56d98daf248ae9b505f3441b5d4f0512deeeb1764736f6c63430008140033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"crossChainData\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6140f680620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620001d05760003560e01c8063728109961162000101578063a25eb31c11620000a3578063db5d91b1116200007a578063db5d91b11462000446578063e34fbfc81462000475578063e874eb20146200048a578063f2fde38b146200049e57600080fd5b8063a25eb31c1462000407578063a52f433c146200041e578063d4fab887146200042f57600080fd5b80638da5cb5b11620000d85780638da5cb5b146200039c57806398077e8614620003cd578063a1a227fa14620003f357600080fd5b80637281099614620003615780638129fc1c146200036b5780638236a7ba146200037557600080fd5b8063440c953b116200017757806368e10383116200014e57806368e1038314620003105780636a30d26c14620003275780636b9707d61462000340578063715018a6146200035757600080fd5b8063440c953b14620002d85780634766573814620002e25780635371a21614620002f957600080fd5b80633e60a22f11620001ac5780633e60a22f14620002425780633f3f6a18146200029257806343348b2f14620002a957600080fd5b80620ddd2714620001d557806303e72e4814620001f25780632f0cb9e3146200020b575b600080fd5b620001df600a5481565b6040519081526020015b60405180910390f35b620002096200020336600462001bee565b620004b5565b005b620002316200021c36600462001c42565b60096020526000908152604090205460ff1681565b6040519015158152602001620001e9565b620002796200025336600462001c5c565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b039091168152602001620001e9565b62000209620002a336600462001ce9565b620005c8565b62000231620002ba36600462001e03565b6001600160a01b031660009081526020819052604090205460ff1690565b620001df60055481565b62000209620002f336600462001e03565b62000852565b620002096200030a36600462001e28565b62000922565b620002096200032136600462001ec2565b62000b2b565b6200033162000c22565b604051620001e9919062001fa0565b620002096200035136600462001e03565b62000d05565b6200020962000dcb565b6200020962000de3565b6200020962000e67565b6200038c6200038636600462001c42565b62001046565b604051620001e992919062002006565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031662000279565b620003e4620003de36600462001c42565b62001136565b604051620001e991906200204c565b60075462000279906001600160a01b031681565b620002096200041836600462002061565b620011eb565b600454610100900460ff1662000231565b6200020962000440366004620020d9565b62001324565b620002316200045736600462001e03565b6001600160a01b031660009081526001602052604090205460ff1690565b620002096200048636600462002184565b5050565b60085462000279906001600160a01b031681565b62000209620004af36600462001e03565b620014b7565b620004bf62001514565b60006001600160a01b0316600383604051620004dc9190620021ca565b908152604051908190036020019020546001600160a01b0316036200053b57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0162000539838262002276565b505b806003836040516200054e9190620021ca565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590620005bc908490849062002343565b60405180910390a15050565b620005d58460ff62002386565b4311156200062a5760405162461bcd60e51b815260206004820152601560248201527f426c6f636b2062696e64696e6720746f6f206f6c64000000000000000000000060448201526064015b60405180910390fd5b8484401462000691576200063e436200158b565b62000649866200158b565b6200065586406200158b565b60405160200162000669939291906200239c565b60408051601f198184030181529082905262461bcd60e51b825262000621916004016200204c565b60006200070387878787604051602001620006b0949392919062002441565b6040516020818303038152906040528051906020012084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200163292505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620007705760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b600a87905560005b8451811015620008485760085485516001600160a01b039091169063b6aed0cb90879084908110620007ae57620007ae620024bd565b6020026020010151620007c190620024d3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152426024820152604401600060405180830381600087803b1580156200081957600080fd5b505af11580156200082e573d6000803e3d6000fd5b5050505080806200083f90620024f8565b91505062000778565b5050505050505050565b6200085c62001514565b6001600160a01b03811660009081526020819052604090205460ff16620008c65760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b6008546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f906200097390879087908790879060040162002574565b60006040518083038186803b1580156200098c57600080fd5b505afa158015620009a1573d6000803e3d6000fd5b50505050600084604051602001620009ba9190620025dc565b60408051601f1981840301815291815281516020928301206000818152600990935291205490915060ff161562000a345760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20616c7265616479207370656e740000000000000000604482015260640162000621565b6001600960008760405160200162000a4d9190620025dc565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff1916931515939093179092556007546001600160a01b0316916399a3ad219162000aa89190890190890162001e03565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301528801356024820152604401600060405180830381600087803b15801562000b0b57600080fd5b505af115801562000b20573d6000803e3d6000fd5b505050505050505050565b60045460ff161562000ba65760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840162000621565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a15050505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000cfc57838290600052602060002001805462000c6890620021e8565b80601f016020809104026020016040519081016040528092919081815260200182805462000c9690620021e8565b801562000ce75780601f1062000cbb5761010080835404028352916020019162000ce7565b820191906000526020600020905b81548152906001019060200180831162000cc957829003601f168201915b50505050508152602001906001019062000c46565b50505050905090565b62000d0f62001514565b6001600160a01b03811660009081526001602052604090205460ff1662000d795760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000621565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47910162000917565b62000dd562001514565b62000de1600062001662565b565b62000ded62001514565b6007546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b15801562000e4c57600080fd5b505af115801562000e61573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801562000eb35750825b905060008267ffffffffffffffff16600114801562000ed15750303b155b90508115801562000ee0575080155b1562000f18576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831562000f4d57845468ff00000000000000001916680100000000000000001785555b62000f5833620016e0565b600060055560405162000f6b9062001b02565b604051809103906000f08015801562000f88573d6000803e3d6000fd5b506008805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039390931692831790915560078054909116821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a183156200103f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200162000c13565b5050505050565b6040805160608082018352600080835260208084018390528385018290528582526006815284822085519384019095528454835260018501805492958694939092840191906200109690620021e8565b80601f0160208091040260200160405190810160405280929190818152602001828054620010c490620021e8565b8015620011155780601f10620010e95761010080835404028352916020019162001115565b820191906000526020600020905b815481529060010190602001808311620010f757829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b600281815481106200114757600080fd5b9060005260206000200160009150905080546200116490620021e8565b80601f01602080910402602001604051908101604052809291908181526020018280546200119290620021e8565b8015620011e35780601f10620011b757610100808354040283529160200191620011e3565b820191906000526020600020905b815481529060010190602001808311620011c557829003601f168201915b505050505081565b60006200123d8335620012026020860186620025ec565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200163292505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620012aa5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000621565b6001600160a01b03811660009081526001602052604090205460ff16620013145760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000621565b6200131f83620016f5565b505050565b6001600160a01b03851660009081526020819052604090205460ff1680620013b55760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f7465640000000000000000000000000000000000000000000000000000000000606482015260840162000621565b81156200148c576000620013ee878786604051602001620013d99392919062002636565b6040516020818303038152906040526200172d565b90506000620013fe828762001632565b9050876001600160a01b0316816001600160a01b031614620014895760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d617463680000000000000000000000000000000000000000606482015260840162000621565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b620014c162001514565b6001600160a01b03811662001506576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240162000621565b620015118162001662565b50565b33620015477f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462000de1576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240162000621565b606060006200159a836200176c565b600101905060008167ffffffffffffffff811115620015bd57620015bd62001b10565b6040519080825280601f01601f191660200182016040528015620015e8576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084620015f257509392505050565b60008060008062001644868662001855565b925092509250620016568282620018a6565b50909150505b92915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b620016ea620019bc565b620015118162001a24565b8035600090815260066020526040902081906200171382826200267e565b505060055460408201351115620015115760400135600555565b60006200173b82516200158b565b826040516020016200174f9291906200278e565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620017b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310620017e3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106200180257662386f26fc10000830492506010015b6305f5e10083106200181b576305f5e100830492506008015b61271083106200183057612710830492506004015b6064831062001843576064830492506002015b600a83106200165c5760010192915050565b60008060008351604103620018935760208401516040850151606086015160001a620018848882858562001a2e565b9550955095505050506200189f565b50508151600091506002905b9250925092565b6000826003811115620018bd57620018bd620027ed565b03620018c7575050565b6001826003811115620018de57620018de620027ed565b0362001916576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156200192d576200192d620027ed565b0362001969576040517ffce698f70000000000000000000000000000000000000000000000000000000081526004810182905260240162000621565b6003826003811115620019805762001980620027ed565b0362000486576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240162000621565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662000de1576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620014c1620019bc565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001a6b575060009150600390508262001af8565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001ac0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001aee5750600092506001915082905062001af8565b9250600091508190505b9450945094915050565b6118bd806200280483390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562001b525762001b5262001b10565b604052919050565b600082601f83011262001b6c57600080fd5b813567ffffffffffffffff81111562001b895762001b8962001b10565b62001b9e601f8201601f191660200162001b26565b81815284602083860101111562001bb457600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811462001be957600080fd5b919050565b6000806040838503121562001c0257600080fd5b823567ffffffffffffffff81111562001c1a57600080fd5b62001c288582860162001b5a565b92505062001c396020840162001bd1565b90509250929050565b60006020828403121562001c5557600080fd5b5035919050565b60006020828403121562001c6f57600080fd5b813567ffffffffffffffff81111562001c8757600080fd5b62001c958482850162001b5a565b949350505050565b60008083601f84011262001cb057600080fd5b50813567ffffffffffffffff81111562001cc957600080fd5b60208301915083602082850101111562001ce257600080fd5b9250929050565b60008060008060008060a0878903121562001d0357600080fd5b86359550602080880135955060408801359450606088013567ffffffffffffffff8082111562001d3257600080fd5b818a0191508a601f83011262001d4757600080fd5b81358181111562001d5c5762001d5c62001b10565b8060051b62001d6d85820162001b26565b918252838101850191858101908e84111562001d8857600080fd5b86860192505b8383101562001dc757848335111562001da657600080fd5b62001db78f88853589010162001b5a565b8252918601919086019062001d8e565b985050505060808a013592508083111562001de157600080fd5b505062001df189828a0162001c9d565b979a9699509497509295939492505050565b60006020828403121562001e1657600080fd5b62001e218262001bd1565b9392505050565b60008060008084860360c081121562001e4057600080fd5b608081121562001e4f57600080fd5b50849350608085013567ffffffffffffffff8082111562001e6f57600080fd5b818701915087601f83011262001e8457600080fd5b81358181111562001e9457600080fd5b8860208260051b850101111562001eaa57600080fd5b95986020929092019750949560a00135945092505050565b60008060008060006060868803121562001edb57600080fd5b62001ee68662001bd1565b9450602086013567ffffffffffffffff8082111562001f0457600080fd5b62001f1289838a0162001c9d565b9096509450604088013591508082111562001f2c57600080fd5b5062001f3b8882890162001c9d565b969995985093965092949392505050565b60005b8381101562001f6957818101518382015260200162001f4f565b50506000910152565b6000815180845262001f8c81602086016020860162001f4c565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101562001ff957603f1988860301845262001fe685835162001f72565b9450928501929085019060010162001fc7565b5092979650505050505050565b82151581526040602082015281516040820152600060208301516060808401526200203560a084018262001f72565b905060408401516080840152809150509392505050565b60208152600062001e21602083018462001f72565b600080604083850312156200207557600080fd5b823567ffffffffffffffff808211156200208e57600080fd5b9084019060608287031215620020a357600080fd5b90925060208401359080821115620020ba57600080fd5b50830160208186031215620020ce57600080fd5b809150509250929050565b600080600080600060a08688031215620020f257600080fd5b620020fd8662001bd1565b94506200210d6020870162001bd1565b9350604086013567ffffffffffffffff808211156200212b57600080fd5b6200213989838a0162001b5a565b945060608801359150808211156200215057600080fd5b506200215f8882890162001b5a565b925050608086013580151581146200217657600080fd5b809150509295509295909350565b600080602083850312156200219857600080fd5b823567ffffffffffffffff811115620021b057600080fd5b620021be8582860162001c9d565b90969095509350505050565b60008251620021de81846020870162001f4c565b9190910192915050565b600181811c90821680620021fd57607f821691505b6020821081036200221e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200131f57600081815260208120601f850160051c810160208610156200224d5750805b601f850160051c820191505b818110156200226e5782815560010162002259565b505050505050565b815167ffffffffffffffff81111562002293576200229362001b10565b620022ab81620022a48454620021e8565b8462002224565b602080601f831160018114620022e35760008415620022ca5750858301515b600019600386901b1c1916600185901b1785556200226e565b600085815260208120601f198616915b828110156200231457888601518255948401946001909101908401620022f3565b5085821015620023335787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062002358604083018562001f72565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200165c576200165c62002370565b7f496e76616c696420626c6f636b2062696e64696e673a00000000000000000000815260008451620023d681601685016020890162001f4c565b80830190507f3a00000000000000000000000000000000000000000000000000000000000000806016830152855162002417816017850160208a0162001f4c565b601792019182015283516200243481601884016020880162001f4c565b0160180195945050505050565b600060808201868352602086818501528560408501526080606085015281855180845260a08601915060a08160051b870101935082870160005b82811015620024ad57609f198887030184526200249a86835162001f72565b955092840192908401906001016200247b565b50939a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156200221e5760001960209190910360031b1b16919050565b6000600182016200250d576200250d62002370565b5060010190565b6001600160a01b0380620025288362001bd1565b168352806200253a6020840162001bd1565b1660208401525060408101356040830152606081013567ffffffffffffffff81168082146200256857600080fd5b80606085015250505050565b62002580818662002514565b60c060808201528260c082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115620025bd57600080fd5b8360051b808660e085013760a0830193909352500160e0019392505050565b608081016200165c828462002514565b6000808335601e198436030181126200260457600080fd5b83018035915067ffffffffffffffff8211156200262057600080fd5b60200191503681900382131562001ce257600080fd5b60006bffffffffffffffffffffffff19808660601b168352808560601b1660148401525082516200266f81602885016020870162001f4c565b91909101602801949350505050565b813581556001808201602080850135601e19863603018112620026a057600080fd5b8501803567ffffffffffffffff811115620026ba57600080fd5b8036038383011315620026cc57600080fd5b620026e481620026dd8654620021e8565b8662002224565b6000601f8211600181146200271d57600083156200270457508382018501355b600019600385901b1c1916600184901b17865562002779565b600086815260209020601f19841690835b828110156200274f578685018801358255938701939089019087016200272e565b50848210156200276f5760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815260008351620027c881601a85016020880162001f4c565b835190830190620027e181601a84016020880162001f4c565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611818806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f81565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fb6565b610428565b34801561020157600080fd5b50610215610210366004610f81565b61049e565b60405190151581526020016101cc565b610153610233366004610fe4565b6104f1565b34801561024457600080fd5b50610153610253366004611010565b6105dd565b34801561026457600080fd5b5061015361068c565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b036600461102d565b6106a0565b3480156102c157600080fd5b506101536102d0366004610fe4565b6107f2565b3480156102e157600080fd5b506102f56102f03660046110a3565b6108a2565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b5061015361032936600461119c565b6108fb565b34801561033a57600080fd5b506101536103493660046111fe565b610afd565b34801561035a57600080fd5b50610153610369366004611220565b610b99565b34801561037a57600080fd5b50610153610389366004611010565b610d79565b600080826040516020016103a291906112cf565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dd0565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112cf565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e16565b604080513381526001600160a01b0386166020820152348183015267ffffffffffffffff8316606082015290519192507f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6919081900360800190a1505050565b6105e5610dd0565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610632576040519150601f19603f3d011682016040523d82523d6000602084013e610637565b606091505b50509050806106885760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b610694610dd0565b61069e6000610e74565b565b6106a8610dd0565b60006106b482426113d0565b90506000836040516020016106c991906112cf565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156107645760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061078790870187611010565b6001600160a01b0316815260208101919091526040016000908120906107b360808701606088016113e3565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107ea82826115b1565b505050505050565b6107fa610dd0565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610847576040519150601f19603f3d011682016040523d82523d6000602084013e61084c565b606091505b505090508061089d5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108ad33610e16565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef775937338288888888886040516108ea97969594939291906116cb565b60405180910390a195945050505050565b600081815260046020526040812054900361096b5760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109d35760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109e6919061172b565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a8484848484604051602001610a6991815260200190565b60405160208183030381529060405280519060200120610ed1565b610af65760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610b05610dd0565b60008281526004602052604090205415610b875760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c095760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c715760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c8491906112cf565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610d0784848484604051602001610a6991815260200190565b610af65760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d81610dd0565b6001600160a01b038116610dc4576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dcd81610e74565b50565b6000546001600160a01b0316331461069e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e49838561178b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610edf868685610ee9565b1495945050505050565b600081815b84811015610f2c57610f1882878784818110610f0c57610f0c6117b3565b90506020020135610f35565b915080610f24816117c9565b915050610eee565b50949350505050565b6000818310610f51576000828152602084905260409020610f60565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7b57600080fd5b50919050565b600060208284031215610f9357600080fd5b813567ffffffffffffffff811115610faa57600080fd5b6104e984828501610f69565b600060208284031215610fc857600080fd5b5035919050565b6001600160a01b0381168114610dcd57600080fd5b60008060408385031215610ff757600080fd5b823561100281610fcf565b946020939093013593505050565b60006020828403121561102257600080fd5b813561042181610fcf565b6000806040838503121561104057600080fd5b823567ffffffffffffffff81111561105757600080fd5b61106385828601610f69565b95602094909401359450505050565b63ffffffff81168114610dcd57600080fd5b60ff81168114610dcd57600080fd5b803561109e81611084565b919050565b6000806000806000608086880312156110bb57600080fd5b85356110c681611072565b945060208601356110d681611072565b9350604086013567ffffffffffffffff808211156110f357600080fd5b818801915088601f83011261110757600080fd5b81358181111561111657600080fd5b89602082850101111561112857600080fd5b602083019550809450505050606086013561114281611084565b809150509295509295909350565b60008083601f84011261116257600080fd5b50813567ffffffffffffffff81111561117a57600080fd5b6020830191508360208260051b850101111561119557600080fd5b9250929050565b60008060008084860360c08112156111b357600080fd5b60808112156111c157600080fd5b50849350608085013567ffffffffffffffff8111156111df57600080fd5b6111eb87828801611150565b9598909750949560a00135949350505050565b6000806040838503121561121157600080fd5b50508035926020909101359150565b6000806000806060858703121561123657600080fd5b843567ffffffffffffffff8082111561124e57600080fd5b61125a88838901610f69565b9550602087013591508082111561127057600080fd5b5061127d87828801611150565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dcd57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112e081610fcf565b6001600160a01b03811660208401525060208301356112fe81611290565b67ffffffffffffffff80821660408501526040850135915061131f82611072565b63ffffffff80831660608601526060860135925061133c83611072565b80831660808601525060808501359150601e1985360301821261135e57600080fd5b602091850191820191358181111561137557600080fd5b80360383131561138457600080fd5b60c060a086015261139960e0860182856112a6565b925050506113a960a08501611093565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f6357610f636113ba565b6000602082840312156113f557600080fd5b813561042181611072565b60008135610f6381611072565b6000808335601e1984360301811261142457600080fd5b83018035915067ffffffffffffffff82111561143f57600080fd5b60200191503681900382131561119557600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147e57607f821691505b602082108103610f7b57634e487b7160e01b600052602260045260246000fd5b601f82111561089d57600081815260208120601f850160051c810160208610156114c55750805b601f850160051c820191505b818110156107ea578281556001016114d1565b67ffffffffffffffff8311156114fc576114fc611454565b6115108361150a835461146a565b8361149e565b6000601f841160018114611544576000851561152c5750838201355b600019600387901b1c1916600186901b178355610af6565b600083815260209020601f19861690835b828110156115755786850135825560209485019460019092019101611555565b50868210156115925760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f6381611084565b81356115bc81610fcf565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115f481611290565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061165283611072565b921760e09190911b90911617815561168a61166f60608401611400565b6001830163ffffffff821663ffffffff198254161781555050565b611697608083018361140d565b6116a58183600286016114e4565b50506106886116b660a084016115a4565b6003830160ff821660ff198254161781555050565b6001600160a01b038816815267ffffffffffffffff87166020820152600063ffffffff808816604084015280871660608401525060c0608083015261171460c0830185876112a6565b905060ff831660a083015298975050505050505050565b60808101823561173a81610fcf565b6001600160a01b03908116835260208401359061175682610fcf565b16602083015260408381013590830152606083013561177481611290565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff8181168382160190808211156117ac576117ac6113ba565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117db576117db6113ba565b506001019056fea2646970667358221220234a0ac859b049fc8a6781a41d5624f2b46a4b36b8dcb6a0661b3e290940f49464736f6c63430008140033a26469706673582212207ff1877a225a79cfb46cc7dddab6257222043013c1e075a2de47d54e06ad473864736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. @@ -442,6 +450,68 @@ func (_ManagementContract *ManagementContractCallerSession) ImportantContractKey return _ManagementContract.Contract.ImportantContractKeys(&_ManagementContract.CallOpts, arg0) } +// IsWithdrawalSpent is a free data retrieval call binding the contract method 0x2f0cb9e3. +// +// Solidity: function isWithdrawalSpent(bytes32 ) view returns(bool) +func (_ManagementContract *ManagementContractCaller) IsWithdrawalSpent(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _ManagementContract.contract.Call(opts, &out, "isWithdrawalSpent", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsWithdrawalSpent is a free data retrieval call binding the contract method 0x2f0cb9e3. +// +// Solidity: function isWithdrawalSpent(bytes32 ) view returns(bool) +func (_ManagementContract *ManagementContractSession) IsWithdrawalSpent(arg0 [32]byte) (bool, error) { + return _ManagementContract.Contract.IsWithdrawalSpent(&_ManagementContract.CallOpts, arg0) +} + +// IsWithdrawalSpent is a free data retrieval call binding the contract method 0x2f0cb9e3. +// +// Solidity: function isWithdrawalSpent(bytes32 ) view returns(bool) +func (_ManagementContract *ManagementContractCallerSession) IsWithdrawalSpent(arg0 [32]byte) (bool, error) { + return _ManagementContract.Contract.IsWithdrawalSpent(&_ManagementContract.CallOpts, arg0) +} + +// LastBatchHash is a free data retrieval call binding the contract method 0x000ddd27. +// +// Solidity: function lastBatchHash() view returns(bytes32) +func (_ManagementContract *ManagementContractCaller) LastBatchHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ManagementContract.contract.Call(opts, &out, "lastBatchHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// LastBatchHash is a free data retrieval call binding the contract method 0x000ddd27. +// +// Solidity: function lastBatchHash() view returns(bytes32) +func (_ManagementContract *ManagementContractSession) LastBatchHash() ([32]byte, error) { + return _ManagementContract.Contract.LastBatchHash(&_ManagementContract.CallOpts) +} + +// LastBatchHash is a free data retrieval call binding the contract method 0x000ddd27. +// +// Solidity: function lastBatchHash() view returns(bytes32) +func (_ManagementContract *ManagementContractCallerSession) LastBatchHash() ([32]byte, error) { + return _ManagementContract.Contract.LastBatchHash(&_ManagementContract.CallOpts) +} + // LastBatchSeqNo is a free data retrieval call binding the contract method 0x440c953b. // // Solidity: function lastBatchSeqNo() view returns(uint256) @@ -473,6 +543,37 @@ func (_ManagementContract *ManagementContractCallerSession) LastBatchSeqNo() (*b return _ManagementContract.Contract.LastBatchSeqNo(&_ManagementContract.CallOpts) } +// MerkleMessageBus is a free data retrieval call binding the contract method 0xe874eb20. +// +// Solidity: function merkleMessageBus() view returns(address) +func (_ManagementContract *ManagementContractCaller) MerkleMessageBus(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ManagementContract.contract.Call(opts, &out, "merkleMessageBus") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MerkleMessageBus is a free data retrieval call binding the contract method 0xe874eb20. +// +// Solidity: function merkleMessageBus() view returns(address) +func (_ManagementContract *ManagementContractSession) MerkleMessageBus() (common.Address, error) { + return _ManagementContract.Contract.MerkleMessageBus(&_ManagementContract.CallOpts) +} + +// MerkleMessageBus is a free data retrieval call binding the contract method 0xe874eb20. +// +// Solidity: function merkleMessageBus() view returns(address) +func (_ManagementContract *ManagementContractCallerSession) MerkleMessageBus() (common.Address, error) { + return _ManagementContract.Contract.MerkleMessageBus(&_ManagementContract.CallOpts) +} + // MessageBus is a free data retrieval call binding the contract method 0xa1a227fa. // // Solidity: function messageBus() view returns(address) @@ -556,6 +657,27 @@ func (_ManagementContract *ManagementContractTransactorSession) AddRollup(r Stru return _ManagementContract.Contract.AddRollup(&_ManagementContract.TransactOpts, r, crossChainData) } +// ExtractNativeValue is a paid mutator transaction binding the contract method 0x5371a216. +// +// Solidity: function ExtractNativeValue((address,address,uint256,uint64) _msg, bytes32[] proof, bytes32 root) returns() +func (_ManagementContract *ManagementContractTransactor) ExtractNativeValue(opts *bind.TransactOpts, _msg StructsValueTransferMessage, proof [][32]byte, root [32]byte) (*types.Transaction, error) { + return _ManagementContract.contract.Transact(opts, "ExtractNativeValue", _msg, proof, root) +} + +// ExtractNativeValue is a paid mutator transaction binding the contract method 0x5371a216. +// +// Solidity: function ExtractNativeValue((address,address,uint256,uint64) _msg, bytes32[] proof, bytes32 root) returns() +func (_ManagementContract *ManagementContractSession) ExtractNativeValue(_msg StructsValueTransferMessage, proof [][32]byte, root [32]byte) (*types.Transaction, error) { + return _ManagementContract.Contract.ExtractNativeValue(&_ManagementContract.TransactOpts, _msg, proof, root) +} + +// ExtractNativeValue is a paid mutator transaction binding the contract method 0x5371a216. +// +// Solidity: function ExtractNativeValue((address,address,uint256,uint64) _msg, bytes32[] proof, bytes32 root) returns() +func (_ManagementContract *ManagementContractTransactorSession) ExtractNativeValue(_msg StructsValueTransferMessage, proof [][32]byte, root [32]byte) (*types.Transaction, error) { + return _ManagementContract.Contract.ExtractNativeValue(&_ManagementContract.TransactOpts, _msg, proof, root) +} + // GrantSequencerEnclave is a paid mutator transaction binding the contract method 0x47665738. // // Solidity: function GrantSequencerEnclave(address _addr) returns() @@ -703,6 +825,27 @@ func (_ManagementContract *ManagementContractTransactorSession) SetImportantCont return _ManagementContract.Contract.SetImportantContractAddress(&_ManagementContract.TransactOpts, key, newAddress) } +// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x3f3f6a18. +// +// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 blockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature) returns() +func (_ManagementContract *ManagementContractTransactor) AddCrossChainMessagesRoot(opts *bind.TransactOpts, _lastBatchHash [32]byte, blockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte) (*types.Transaction, error) { + return _ManagementContract.contract.Transact(opts, "addCrossChainMessagesRoot", _lastBatchHash, blockHash, blockNum, crossChainHashes, signature) +} + +// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x3f3f6a18. +// +// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 blockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature) returns() +func (_ManagementContract *ManagementContractSession) AddCrossChainMessagesRoot(_lastBatchHash [32]byte, blockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte) (*types.Transaction, error) { + return _ManagementContract.Contract.AddCrossChainMessagesRoot(&_ManagementContract.TransactOpts, _lastBatchHash, blockHash, blockNum, crossChainHashes, signature) +} + +// AddCrossChainMessagesRoot is a paid mutator transaction binding the contract method 0x3f3f6a18. +// +// Solidity: function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 blockHash, uint256 blockNum, bytes[] crossChainHashes, bytes signature) returns() +func (_ManagementContract *ManagementContractTransactorSession) AddCrossChainMessagesRoot(_lastBatchHash [32]byte, blockHash [32]byte, blockNum *big.Int, crossChainHashes [][]byte, signature []byte) (*types.Transaction, error) { + return _ManagementContract.Contract.AddCrossChainMessagesRoot(&_ManagementContract.TransactOpts, _lastBatchHash, blockHash, blockNum, crossChainHashes, signature) +} + // Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. // // Solidity: function initialize() returns() diff --git a/contracts/src/management/ManagementContract.sol b/contracts/src/management/ManagementContract.sol index ea35eb9bf6..5441f937d7 100644 --- a/contracts/src/management/ManagementContract.sol +++ b/contracts/src/management/ManagementContract.sol @@ -4,10 +4,13 @@ pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; import "./Structs.sol"; +import * as MessageStructs from "../messaging/Structs.sol"; import * as MessageBus from "../messaging/MessageBus.sol"; +import * as MerkleTreeMessageBus from "../messaging/MerkleTreeMessageBus.sol"; contract ManagementContract is Initializable, OwnableUpgradeable { @@ -49,10 +52,17 @@ contract ManagementContract is Initializable, OwnableUpgradeable { Structs.RollupStorage private rollups; //The messageBus where messages can be sent to Obscuro MessageBus.IMessageBus public messageBus; + MerkleTreeMessageBus.IMerkleTreeMessageBus public merkleMessageBus; + mapping(bytes32 =>bool) public isWithdrawalSpent; + + bytes32 public lastBatchHash; + function initialize() public initializer { __Ownable_init(msg.sender); lastBatchSeqNo = 0; - messageBus = new MessageBus.MessageBus(); + merkleMessageBus = new MerkleTreeMessageBus.MerkleTreeMessageBus(); + messageBus = MessageBus.IMessageBus(address(merkleMessageBus)); + emit LogManagementContractCreated(address(messageBus)); } @@ -67,9 +77,25 @@ contract ManagementContract is Initializable, OwnableUpgradeable { lastBatchSeqNo = _r.LastSequenceNumber; } } - // - // -- End of Tree element list Library - // + + function addCrossChainMessagesRoot(bytes32 _lastBatchHash, bytes32 blockHash, uint256 blockNum, bytes[] memory crossChainHashes, bytes calldata signature) external { + if (block.number > blockNum + 255) { + revert("Block binding too old"); + } + + if ((blockhash(blockNum) != blockHash)) { + revert(string(abi.encodePacked("Invalid block binding:", Strings.toString(block.number),":", Strings.toString(uint256(blockHash)), ":", Strings.toString(uint256(blockhash(blockNum)))))); + } + + address enclaveID = ECDSA.recover(keccak256(abi.encode(_lastBatchHash, blockHash, blockNum, crossChainHashes)), signature); + require(attested[enclaveID], "enclaveID not attested"); //todo: only sequencer, rather than everyone who has attested. + + lastBatchHash = _lastBatchHash; + + for(uint256 i = 0; i < crossChainHashes.length; i++) { + merkleMessageBus.addStateRoot(bytes32(crossChainHashes[i]), block.timestamp); //todo: change the activation time. + } + } // TODO: ensure challenge period is added on top of block timestamp. function pushCrossChainMessages(Structs.HeaderCrossChainData calldata crossChainData) internal { @@ -81,7 +107,6 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // solc-ignore-next-line unused-param function AddRollup(Structs.MetaRollup calldata r, Structs.HeaderCrossChainData calldata crossChainData) public { - // TODO: Add a check that ensures the cross messages are coming from the correct fork using block hashes. address enclaveID = ECDSA.recover(r.Hash, r.Signature); // revert if the EnclaveID is not attested require(attested[enclaveID], "enclaveID not attested"); @@ -89,7 +114,6 @@ contract ManagementContract is Initializable, OwnableUpgradeable { require(sequencerEnclave[enclaveID], "enclaveID not a sequencer"); AppendRollup(r); - pushCrossChainMessages(crossChainData); } // InitializeNetworkSecret kickstarts the network secret, can only be called once @@ -113,6 +137,16 @@ contract ManagementContract is Initializable, OwnableUpgradeable { // currently this is a no-op, nodes will monitor for these transactions and respond to them } + function ExtractNativeValue(MessageStructs.Structs.ValueTransferMessage calldata _msg, bytes32[] calldata proof, bytes32 root) external { + merkleMessageBus.verifyValueTransferInclusion(_msg, proof, root); + bytes32 msgHash = keccak256(abi.encode(_msg)); + require(isWithdrawalSpent[msgHash] == false, "withdrawal already spent"); + isWithdrawalSpent[keccak256(abi.encode(_msg))] = true; + + messageBus.receiveValueFromL2(_msg.receiver, _msg.amount); + //todo track state + } + // An attested enclave will pickup the Network Secret Request // and, if valid, will respond with the Network Secret // and mark the requesterID as attested