From 424bd203253f4b04daa2722f8cde17a1d3b8759b Mon Sep 17 00:00:00 2001 From: Franco Barpp Gomes Date: Thu, 3 Oct 2024 18:19:27 -0300 Subject: [PATCH] Contract refactorings and test improvements (#277) * test: Add RollupOperators related tests * test: Add ServiceManager and TaskManager trivial tests * feat: Remove unused getter * refactor: Comment unused variable name * test: Add SFFLOperatorSetUpdateRegistry tests * chore: Update bindings --- .../bindings/SFFLRegistryRollup/binding.go | 25 +- .../bindings/SFFLServiceManager/binding.go | 2 +- contracts/bindings/SFFLTaskManager/binding.go | 95 ++++---- contracts/evm/src/eth/SFFLTaskManager.sol | 16 +- .../test/SFFLOperatorSetUpdateRegistry.t.sol | 224 ++++++++++++++++++ contracts/evm/test/SFFLRegistryRollup.t.sol | 179 ++++++++++++++ contracts/evm/test/SFFLServiceManager.t.sol | 121 +++++++++- contracts/evm/test/SFFLTaskManager.t.sol | 70 ++++++ 8 files changed, 672 insertions(+), 60 deletions(-) create mode 100644 contracts/evm/test/SFFLOperatorSetUpdateRegistry.t.sol diff --git a/contracts/bindings/SFFLRegistryRollup/binding.go b/contracts/bindings/SFFLRegistryRollup/binding.go index 2575e994..d3cf58a0 100644 --- a/contracts/bindings/SFFLRegistryRollup/binding.go +++ b/contracts/bindings/SFFLRegistryRollup/binding.go @@ -81,8 +81,8 @@ type StateRootUpdateMessage struct { // ContractSFFLRegistryRollupMetaData contains all meta data concerning the ContractSFFLRegistryRollup contract. var ContractSFFLRegistryRollupMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceOperatorSetUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalWeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"quorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextOperatorUpdateId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitialOperatorSet\",\"inputs\":[{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setQuorumThreshold\",\"inputs\":[{\"name\":\"newQuorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorSet\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6143c280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101845760003560e01c8063715018a6116100d9578063d5d4bb5a11610087578063d5d4bb5a1461036c578063dd64766e1461037f578063e0f5d9f014610392578063ef024458146103bd578063f2fde38b146103c4578063f4db0571146103d7578063fabc1cbc146103df57600080fd5b8063715018a6146102f457806382616b7b146102fc578063886f11951461030f5780638da5cb5b1461032257806390540c3714610333578063b128aeee14610346578063b3a9e53b1461035957600080fd5b80632db52ea5116101365780632db52ea5146102425780632f65284e146102555780634afa71b914610276578063595c6a671461028e5780635ac86ab7146102965780635c975abb146102c95780636f5b9918146102d157600080fd5b80630510c1911461018957806306aba0e1146101a857806310d67a2f146101cd578063136439dd146101e25780631df9e1d2146101f55780631fb4d41114610208578063245a7bfc1461021b575b600080fd5b610191600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b03909116815260200161019f565b6101e06101db366004613746565b6103f2565b005b6101e06101f0366004613763565b6104ae565b6101e0610203366004613794565b6105db565b6101e06102163660046137ec565b6106cc565b60ce5461023590600160401b90046001600160a01b031681565b60405161019f919061383a565b6101e0610250366004613865565b610755565b610268610263366004613892565b610768565b60405190815260200161019f565b60cd54600160801b90046001600160801b03166101b5565b6101e0610887565b6102b96102a4366004613935565b606654600160ff9092169190911b9081161490565b604051901515815260200161019f565b606654610268565b6102d9610941565b6040805182518152602092830151928101929092520161019f565b6101e0610964565b6101e061030a366004613958565b610978565b606554610235906001600160a01b031681565b6033546001600160a01b0316610235565b6101e06103413660046139b1565b610a9d565b6101e0610354366004613aff565b610bed565b610268610367366004613bd3565b610cd1565b61026861037a366004613c06565b610d02565b6101b561038d366004613763565b610e5b565b60ce546103a5906001600160401b031681565b6040516001600160401b03909116815260200161019f565b60646101b5565b6101e06103d2366004613746565b610e78565b610191600081565b6101e06103ed366004613763565b610eee565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104699190613c4a565b6001600160a01b0316336001600160a01b0316146104a25760405162461bcd60e51b815260040161049990613c67565b60405180910390fd5b6104ab81611045565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104de90339060040161383a565b602060405180830381865afa1580156104fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f9190613cb1565b61053b5760405162461bcd60e51b815260040161049990613cd3565b606654818116146105af5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610499565b6066819055604051818152339060008051602061434d833981519152906020015b60405180910390a250565b6105e361113c565b60ce546001600160401b03166105fc6020830183613d1b565b6001600160401b0316146106225760405162461bcd60e51b815260040161049990613d36565b61062f6020820182613d1b565b61063a906001613d76565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104ab61066b6040830183613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b7576106a860608302860136819003810190613df0565b8152602001906001019061068b565b505050505060ca61119690919063ffffffff16565b606654600190600290811614156106f55760405162461bcd60e51b815260040161049990613e0c565b61070a6107018461139f565b60ca9084611420565b6107265760405162461bcd60e51b815260040161049990613e3f565b6107506107366020850185613e67565b6107466040860160208701613d1b565b8560a0013561180a565b505050565b61075d61113c565b6104ab60ca82611870565b60006060850135158015906107805750608085013515155b6107c75760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610499565b60006097816107d96020890189613e67565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108089190613d1b565b6001600160401b0316815260208101919091526040016000205490508061087357826108685760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610499565b610873868585611929565b61087d8686610d02565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108b790339060040161383a565b602060405180830381865afa1580156108d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f89190613cb1565b6109145760405162461bcd60e51b815260040161049990613cd3565b6000196066819055604051908152339060008051602061434d8339815191529060200160405180910390a2565b61094961361d565b506040805180820190915260cb54815260cc54602082015290565b61096c61113c565b610976600061193a565b565b606654600090600190811614156109a15760405162461bcd60e51b815260040161049990613e0c565b60ce546001600160401b03166109ba6020850185613d1b565b6001600160401b0316146109e05760405162461bcd60e51b815260040161049990613d36565b6109ec6107018461198c565b610a085760405162461bcd60e51b815260040161049990613e3f565b610a156020840184613d1b565b610a20906001613d76565b60ce805467ffffffffffffffff19166001600160401b0392909216919091179055610750610a516040850185613da1565b808060200260200160405190810160405280939291908181526020016000905b828210156106b757610a8e60608302860136819003810190613df0565b81526020019060010190610a71565b600054610100900460ff1615808015610abd5750600054600160ff909116105b80610ad75750303b158015610ad7575060005460ff166001145b610b3a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610499565b6000805460ff191660011790558015610b5d576000805461ff0019166101001790555b610b688260006119c0565b610b718461193a565b610b7c60ca86611870565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610be6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c495760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b6044820152606401610499565b60cd546001600160801b031615610ca25760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a65646044820152606401610499565b610cad60ca83611196565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d156020870187613e67565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d449190613d1b565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610db45760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610499565b610e53610dc46020850185613746565b602085013583610dd76040880188613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e19925050506060890189613e82565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a9892505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610cfc565b610e8061113c565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610499565b6104ab8161193a565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613c4a565b6001600160a01b0316336001600160a01b031614610f955760405162461bcd60e51b815260040161049990613c67565b60665419811960665419161461100e5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610499565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105d0565b6001600160a01b0381166110d35760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610499565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610499565b61119e613637565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b8451811015611364578481815181106111e5576111e5613ec8565b6020026020010151935060006112108560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b03908116911681141561127c5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b6044820152606401610499565b602086015161128b8286613ede565b6112959190613f06565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b0392831617905590945081166112e05785516112d9908690611bd3565b945061130c565b60208601516001600160801b031661130c576113096113028760000151611c6a565b8690611bd3565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a25050808061135c90613f28565b9150506111ca565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016113d39190613f43565b60405160208183030381529060405280519060200120604051602001611403929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114945760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a65646044820152606401610499565b60006114a08580613fad565b90506001600160401b038111156114b9576114b9613a0b565b6040519080825280602002602001820160405280156114e2578160200160208202803683370190505b50905060005b6114f28680613fad565b90508110156116cb576115456115088780613fad565b8381811061151857611518613ec8565b90506040020180360381019061152e9190613ff6565b805160009081526020918201519091526040902090565b82828151811061155757611557613ec8565b602090810291909101015280156115ee5781611574600183614012565b8151811061158457611584613ec8565b602002602001015160001c8282815181106115a1576115a1613ec8565b602002602001015160001c116115ee5760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b6044820152606401610499565b600088600001600084848151811061160857611608613ec8565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116765760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b6044820152606401610499565b6116a96116838880613fad565b8481811061169357611693613ec8565b9050604002018036038101906113029190613ff6565b94506116b58185614012565b93505080806116c390613f28565b9150506114e8565b506116f96116d884611c6a565b6040805180820190915260018a0154815260028a0154602082015290611bd3565b925060008061172c8886611715368b90038b0160208c01614098565b611727368c90038c0160a08d01613ff6565b611cf9565b915091508161177d5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c656400006044820152606401610499565b806117c15760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b6044820152606401610499565b60038901546064906117e5906001600160801b03600160801b8204811691166140d7565b6117ef919061411c565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b03821611156118dc5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b6064820152608401610499565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161193484826106cc565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016113d39190614142565b6065546001600160a01b03161580156119e157506001600160a01b03821615155b611a635760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610499565b6066819055604051818152339060008051602061434d8339815191529060200160405180910390a2611a9482611045565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611ad8906034016040516020818303038152906040528688611e58565b9150915081611b225760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610499565b6000611b2d82611e81565b9050600080611b628a604051602001611b4891815260200190565b604051602081830303815290604052888560400151611e58565b9150915081611bb35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610499565b611bc4611bbf82611f45565b611f58565b9b9a5050505050505050505050565b611bdb61361d565b611be3613657565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c2257611c24565bfe5b5080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b6044820152606401610499565b505092915050565b611c7261361d565b8151158015611c8357506020820151155b15611ca1575050604080518082019091526000808252602082015290565b60405180604001604052808360000151815260200160008051602061436d8339815191528460200151611cd4919061421a565b611cec9060008051602061436d833981519152614012565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d4157611d41613ec8565b60200201518951600160200201518a60200151600060028110611d6657611d66613ec8565b60200201518b60200151600160028110611d8257611d82613ec8565b602090810291909101518c518d830151604051611ddf9a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e02919061421a565b9050611e4a611e146113028884611f87565b611e1c612003565b611e40611e3185611e2b6120c3565b90611f87565b611e3a8c6120e4565b90611bd3565b886201d4c0612168565b909890975095505050505050565b600060606000611e678661238c565b9050611e748186866123be565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611eae83612499565b90506040518060800160405280611ede83600081518110611ed157611ed1613ec8565b60200260200101516124ac565b8152602001611ef983600181518110611ed157611ed1613ec8565b8152602001611f2183600281518110611f1457611f14613ec8565b60200260200101516124b3565b8152602001611f3c83600381518110611f1457611f14613ec8565b90529392505050565b6060610cfc611f5383612555565b612582565b6000806000602084511115611f6e576020611f71565b83515b60209485015194036008029390931c9392505050565b611f8f61361d565b611f97613675565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c22575080611c625760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b6044820152606401610499565b61200b613693565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6120cb61361d565b5060408051808201909152600181526002602082015290565b6120ec61361d565b6000808061210860008051602061436d8339815191528661421a565b90505b6121148161260d565b909350915060008051602061436d83398151915282830983141561214e576040805180820190915290815260208101919091529392505050565b60008051602061436d83398151915260018208905061210b565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061219a6136b8565b60005b600281101561235f5760006121b382600661422e565b90508482600281106121c7576121c7613ec8565b602002015151836121d983600061424d565b600c81106121e9576121e9613ec8565b602002015284826002811061220057612200613ec8565b60200201516020015183826001612217919061424d565b600c811061222757612227613ec8565b602002015283826002811061223e5761223e613ec8565b602002015151518361225183600261424d565b600c811061226157612261613ec8565b602002015283826002811061227857612278613ec8565b602002015151600160200201518361229183600361424d565b600c81106122a1576122a1613ec8565b60200201528382600281106122b8576122b8613ec8565b6020020151602001516000600281106122d3576122d3613ec8565b6020020151836122e483600461424d565b600c81106122f4576122f4613ec8565b602002015283826002811061230b5761230b613ec8565b60200201516020015160016002811061232657612326613ec8565b60200201518361233783600561424d565b600c811061234757612347613ec8565b6020020152508061235781613f28565b91505061219d565b506123686136d7565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123a891815260200190565b6040516020818303038152906040529050919050565b6000606060006123cd8561268f565b905060008060006123df848a89612789565b815192955090935091501580806123f35750815b61243f5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610499565b60008161245b5760405180602001604052806000815250612487565b6124878661246a600188614012565b8151811061247a5761247a613ec8565b6020026020010151612bad565b919b919a509098505050505050505050565b6060610cfc6124a783612555565b612bd7565b6000610cfc825b60006021826000015111156124da5760405162461bcd60e51b815260040161049990614265565b60008060006124e885612dbd565b9194509250905060008160018111156125035761250361429c565b146125205760405162461bcd60e51b815260040161049990614265565b6000838660200151612532919061424d565b8051909150602084101561087d5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6060600080600061259285612dbd565b9194509250905060008160018111156125ad576125ad61429c565b146125f55760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610499565b612604856020015184846130f3565b95945050505050565b6000808060008051602061436d833981519152600360008051602061436d8339815191528660008051602061436d833981519152888909090890506000612683827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061436d8339815191526131d1565b91959194509092505050565b6060600061269c83612499565b9050600081516001600160401b038111156126b9576126b9613a0b565b6040519080825280602002602001820160405280156126fe57816020015b60408051808201909152606080825260208201528152602001906001900390816126d75790505b50905060005b825181101561278157600061273184838151811061272457612724613ec8565b6020026020010151612582565b9050604051806040016040528082815260200161274d83612499565b81525083838151811061276257612762613ec8565b602002602001018190525050808061277990613f28565b915050612704565b509392505050565b6000606081808061279987613279565b905060008690506000806127c0604051806040016040528060608152602001606081525090565b60005b8c51811015612b85578c81815181106127de576127de613ec8565b6020026020010151915082846127f4919061424d565b935061280160018861424d565b965083612859578151805160209091012085146128545760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610499565b612916565b8151516020116128bb578151805160209091012085146128545760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610499565b846128c983600001516133b3565b146129165760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610499565b6129226010600161424d565b826020015151141561299b57855184141561293c57612b85565b600086858151811061295057612950613ec8565b602001015160f81c60f81b60f81c9050600083602001518260ff168151811061297b5761297b613ec8565b6020026020010151905061298e816133db565b9650600194505050612b73565b60028260200151511415612b2b5760006129b483613411565b90506000816000815181106129cb576129cb613ec8565b016020015160f81c905060006129e26002836142b2565b6129ed9060026142d4565b905060006129fe848360ff16613435565b90506000612a0c8b8a613435565b90506000612a1a838361346b565b905060ff851660021480612a31575060ff85166003145b15612a6b57808351148015612a465750808251145b15612a5857612a55818b61424d565b99505b50600160ff1b9950612b85945050505050565b60ff85161580612a7e575060ff85166001145b15612ad45782518114612a9e5750600160ff1b9950612b85945050505050565b612ac58860200151600181518110612ab857612ab8613ec8565b60200260200101516133db565b9a509750612b73945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610499565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610499565b80612b7d81613f28565b9150506127c3565b50600160ff1b841486612b988786613435565b909e909d50909b509950505050505050505050565b60208101518051606091610cfc91612bc790600190614012565b8151811061272457612724613ec8565b6060600080612be584612dbd565b91935090915060019050816001811115612c0157612c0161429c565b14612c485760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610499565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612c615790505090506000835b8651811015612db25760208210612cfa5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610499565b600080612d376040518060400160405280858c60000151612d1b9190614012565b8152602001858c60200151612d30919061424d565b9052612dbd565b509150915060405180604001604052808383612d53919061424d565b8152602001848b60200151612d68919061424d565b815250858581518110612d7d57612d7d613ec8565b6020908102919091010152612d9360018561424d565b9350612d9f818361424d565b612da9908461424d565b92505050612c8e565b508152949350505050565b600080600080846000015111612e105760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610499565b6020840151805160001a607f8111612e355760006001600094509450945050506130ec565b60b78111612ead576000612e4a608083614012565b905080876000015111612e9b5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610499565b600195509350600092506130ec915050565b60bf8111612f97576000612ec260b783614012565b905080876000015111612f175760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610499565b600183015160208290036101000a9004612f31818361424d565b885111612f7b5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610499565b612f8682600161424d565b96509450600093506130ec92505050565b60f7811161300c576000612fac60c083614012565b905080876000015111612ffb5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610499565b6001955093508492506130ec915050565b600061301960f783614012565b90508087600001511161306e5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610499565b600183015160208290036101000a9004613088818361424d565b8851116130d05760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610499565b6130db82600161424d565b96509450600193506130ec92505050565b9193909250565b60606000826001600160401b0381111561310f5761310f613a0b565b6040519080825280601f01601f191660200182016040528015613139576020820181803683370190505b50905080516000141561314d579050611803565b6000613159858761424d565b90506020820160005b61316d6020876142f7565b8110156131a4578251825261318360208461424d565b925061319060208361424d565b91508061319c81613f28565b915050613162565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b6000806131dc6136d7565b6131e46136f5565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c2257508261326e5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c7572650000000000006044820152606401610499565b505195945050505050565b606060008251600261328b919061422e565b6001600160401b038111156132a2576132a2613a0b565b6040519080825280601f01601f1916602001820160405280156132cc576020820181803683370190505b50905060005b83518110156133ac5760048482815181106132ef576132ef613ec8565b01602001516001600160f81b031916901c8261330c83600261422e565b8151811061331c5761331c613ec8565b60200101906001600160f81b031916908160001a905350601084828151811061334757613347613ec8565b0160200151613359919060f81c6142b2565b60f81b8261336883600261422e565b61337390600161424d565b8151811061338357613383613ec8565b60200101906001600160f81b031916908160001a905350806133a481613f28565b9150506132d2565b5092915050565b60006020825110156133c757506020015190565b81806020019051810190610cfc919061430b565b600060606020836000015110156133fc576133f5836134e7565b9050613408565b61340583612582565b90505b611803816133b3565b6060610cfc613430836020015160008151811061272457612724613ec8565b613279565b6060825182106134545750604080516020810190915260008152610cfc565b61180383838486516134669190614012565b6134f2565b6000805b80845111801561347f5750808351115b80156134d0575082818151811061349857613498613ec8565b602001015160f81c60f81b6001600160f81b0319168482815181106134bf576134bf613ec8565b01602001516001600160f81b031916145b1561180357806134df81613f28565b91505061346f565b6060610cfc82613607565b60608161350081601f61424d565b101561351e5760405162461bcd60e51b815260040161049990614324565b82613529838261424d565b10156135475760405162461bcd60e51b815260040161049990614324565b613551828461424d565b845110156135955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610499565b6060821580156135b457604051915060008252602082016040526135fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156135ed5780518352602092830192016135d5565b5050858452601f01601f1916604052505b50949350505050565b6060610cfc8260200151600084600001516130f3565b604051806040016040528060008152602001600081525090565b604051806040016040528061364a61361d565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136a6613713565b81526020016136b3613713565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104ab57600080fd5b60006020828403121561375857600080fd5b813561180381613731565b60006020828403121561377557600080fd5b5035919050565b60006060828403121561378e57600080fd5b50919050565b6000602082840312156137a657600080fd5b81356001600160401b038111156137bc57600080fd5b610e538482850161377c565b600060c0828403121561378e57600080fd5b600060e0828403121561378e57600080fd5b60008060e083850312156137ff57600080fd5b61380984846137c8565b915060c08301356001600160401b0381111561382457600080fd5b613830858286016137da565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611cf457600080fd5b60006020828403121561387757600080fd5b6118038261384e565b60006080828403121561378e57600080fd5b60008060008061010085870312156138a957600080fd5b6138b386866137c8565b935060c08501356001600160401b03808211156138cf57600080fd5b6138db88838901613880565b945060e08701359150808211156138f157600080fd5b818701915087601f83011261390557600080fd5b81358181111561391457600080fd5b88602082850101111561392657600080fd5b95989497505060200194505050565b60006020828403121561394757600080fd5b813560ff8116811461180357600080fd5b6000806040838503121561396b57600080fd5b82356001600160401b038082111561398257600080fd5b61398e8683870161377c565b935060208501359150808211156139a457600080fd5b50613830858286016137da565b600080600080608085870312156139c757600080fd5b6139d08561384e565b935060208501356139e081613731565b925060408501356139f081613731565b91506060850135613a0081613731565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a4357613a43613a0b565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613a7157613a71613a0b565b604052919050565b600060408284031215613a8b57600080fd5b613a93613a21565b9050813581526020820135602082015292915050565b600060608284031215613abb57600080fd5b613ac3613a21565b9050613acf8383613a79565b8152613add6040830161384e565b602082015292915050565b80356001600160401b0381168114611cf457600080fd5b60008060408385031215613b1257600080fd5b82356001600160401b0380821115613b2957600080fd5b818501915085601f830112613b3d57600080fd5b8135602082821115613b5157613b51613a0b565b613b5f818360051b01613a49565b82815281810193506060928302850182019289841115613b7e57600080fd5b948201945b83861015613ba457613b958a87613aa9565b85529485019493820193613b83565b509550613bb2878201613ae8565b9450505050509250929050565b803563ffffffff81168114611cf457600080fd5b60008060408385031215613be657600080fd5b613bef83613bbf565b9150613bfd60208401613ae8565b90509250929050565b60008060e08385031215613c1957600080fd5b613c2384846137c8565b915060c08301356001600160401b03811115613c3e57600080fd5b61383085828601613880565b600060208284031215613c5c57600080fd5b815161180381613731565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613cc357600080fd5b8151801515811461180357600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d2d57600080fd5b61180382613ae8565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613d9857613d98613d60565b01949350505050565b6000808335601e19843603018112613db857600080fd5b8301803591506001600160401b03821115613dd257600080fd5b6020019150606081023603821315613de957600080fd5b9250929050565b600060608284031215613e0257600080fd5b6118038383613aa9565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613e7957600080fd5b61180382613bbf565b6000808335601e19843603018112613e9957600080fd5b8301803591506001600160401b03821115613eb357600080fd5b602001915036819003821315613de957600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613efe57613efe613d60565b039392505050565b60006001600160801b03828116848216808303821115613d9857613d98613d60565b6000600019821415613f3c57613f3c613d60565b5060010190565b60c0810163ffffffff613f5584613bbf565b168252613f6460208401613ae8565b6001600160401b03808216602085015280613f8160408701613ae8565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e19843603018112613fc457600080fd5b8301803591506001600160401b03821115613fde57600080fd5b6020019150600681901b3603821315613de957600080fd5b60006040828403121561400857600080fd5b6118038383613a79565b60008282101561402457614024613d60565b500390565b600082601f83011261403a57600080fd5b604051604081018181106001600160401b038211171561405c5761405c613a0b565b806040525080604084018581111561407357600080fd5b845b8181101561408d578035835260209283019201614075565b509195945050505050565b6000608082840312156140aa57600080fd5b6140b2613a21565b6140bc8484614029565b81526140cb8460408501614029565b60208201529392505050565b60006001600160801b03828116848216811515828404821116156140fd576140fd613d60565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061413657614136614106565b92169190910492915050565b60006020808352608083016001600160401b038061415f87613ae8565b168386015261416f838701613ae8565b604082821681880152808801359150601e1988360301821261419057600080fd5b908701908135838111156141a357600080fd5b6060935083810236038913156141b857600080fd5b87840184905293849052908401926000919060a088015b8184101561420d578535815286860135878201526001600160801b036141f684880161384e565b1681840152948401946001939093019284016141cf565b9998505050505050505050565b60008261422957614229614106565b500690565b600081600019048311821515161561424857614248613d60565b500290565b6000821982111561426057614260613d60565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806142c5576142c5614106565b8060ff84160691505092915050565b600060ff821660ff8416808210156142ee576142ee613d60565b90039392505050565b60008261430657614306614106565b500490565b60006020828403121561431d57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122088bae87d6bae274768571c4de75678f928a7db4743daddc1635592c48525276d64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_OPERATOR_SET\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forceOperatorSetUpdate\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getApk\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorWeight\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQuorumThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalWeight\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"quorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nextOperatorUpdateId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAggregator\",\"inputs\":[{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitialOperatorSet\",\"inputs\":[{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_nextOperatorUpdateId\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setQuorumThreshold\",\"inputs\":[{\"name\":\"newQuorumThreshold\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorSet\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"signatureInfo\",\"type\":\"tuple\",\"internalType\":\"structRollupOperators.SignatureInfo\",\"components\":[{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61441480620000f46000396000f3fe608060405234801561001057600080fd5b506004361061018f5760003560e01c8063715018a6116100e4578063d5d4bb5a11610092578063d5d4bb5a14610377578063dd64766e1461038a578063e0f5d9f01461039d578063ef024458146103c8578063f2fde38b146103cf578063f4db0571146103e2578063f9120af6146103ea578063fabc1cbc146103fd57600080fd5b8063715018a6146102ff57806382616b7b14610307578063886f11951461031a5780638da5cb5b1461032d57806390540c371461033e578063b128aeee14610351578063b3a9e53b1461036457600080fd5b80632db52ea5116101415780632db52ea51461024d5780632f65284e146102605780634afa71b914610281578063595c6a67146102995780635ac86ab7146102a15780635c975abb146102d45780636f5b9918146102dc57600080fd5b80630510c1911461019457806306aba0e1146101b357806310d67a2f146101d8578063136439dd146101ed5780631df9e1d2146102005780631fb4d41114610213578063245a7bfc14610226575b600080fd5b61019c600181565b60405160ff90911681526020015b60405180910390f35b60cd546001600160801b03165b6040516001600160801b0390911681526020016101aa565b6101eb6101e6366004613798565b610410565b005b6101eb6101fb3660046137b5565b6104cc565b6101eb61020e3660046137e6565b6105f9565b6101eb61022136600461383e565b6106ea565b60ce5461024090600160401b90046001600160a01b031681565b6040516101aa919061388c565b6101eb61025b3660046138b7565b610773565b61027361026e3660046138e4565b610786565b6040519081526020016101aa565b60cd54600160801b90046001600160801b03166101c0565b6101eb6108a5565b6102c46102af366004613987565b606654600160ff9092169190911b9081161490565b60405190151581526020016101aa565b606654610273565b6102e461095f565b604080518251815260209283015192810192909252016101aa565b6101eb610982565b6101eb6103153660046139aa565b610996565b606554610240906001600160a01b031681565b6033546001600160a01b0316610240565b6101eb61034c366004613a03565b610abb565b6101eb61035f366004613b51565b610c0b565b610273610372366004613c25565b610cef565b610273610385366004613c58565b610d20565b6101c06103983660046137b5565b610e79565b60ce546103b0906001600160401b031681565b6040516001600160401b0390911681526020016101aa565b60646101c0565b6101eb6103dd366004613798565b610e96565b61019c600081565b6101eb6103f8366004613798565b610f0c565b6101eb61040b3660046137b5565b610f40565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104879190613c9c565b6001600160a01b0316336001600160a01b0316146104c05760405162461bcd60e51b81526004016104b790613cb9565b60405180910390fd5b6104c981611097565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906104fc90339060040161388c565b602060405180830381865afa158015610519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053d9190613d03565b6105595760405162461bcd60e51b81526004016104b790613d25565b606654818116146105cd5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b6066819055604051818152339060008051602061439f833981519152906020015b60405180910390a250565b61060161118e565b60ce546001600160401b031661061a6020830183613d6d565b6001600160401b0316146106405760405162461bcd60e51b81526004016104b790613d88565b61064d6020820182613d6d565b610658906001613dc8565b60ce805467ffffffffffffffff19166001600160401b03929092169190911790556104c96106896040830183613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d5576106c660608302860136819003810190613e42565b815260200190600101906106a9565b505050505060ca6111e890919063ffffffff16565b606654600190600290811614156107135760405162461bcd60e51b81526004016104b790613e5e565b61072861071f846113f1565b60ca9084611472565b6107445760405162461bcd60e51b81526004016104b790613e91565b61076e6107546020850185613eb9565b6107646040860160208701613d6d565b8560a0013561185c565b505050565b61077b61118e565b6104c960ca826118c2565b600060608501351580159061079e5750608085013515155b6107e55760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b60448201526064016104b7565b60006097816107f76020890189613eb9565b63ffffffff1663ffffffff16815260200190815260200160002060008760200160208101906108269190613d6d565b6001600160401b0316815260208101919091526040016000205490508061089157826108865760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b60448201526064016104b7565b61089186858561197b565b61089b8686610d20565b9695505050505050565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906108d590339060040161388c565b602060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190613d03565b6109325760405162461bcd60e51b81526004016104b790613d25565b6000196066819055604051908152339060008051602061439f8339815191529060200160405180910390a2565b61096761366f565b506040805180820190915260cb54815260cc54602082015290565b61098a61118e565b610994600061198c565b565b606654600090600190811614156109bf5760405162461bcd60e51b81526004016104b790613e5e565b60ce546001600160401b03166109d86020850185613d6d565b6001600160401b0316146109fe5760405162461bcd60e51b81526004016104b790613d88565b610a0a61071f846119de565b610a265760405162461bcd60e51b81526004016104b790613e91565b610a336020840184613d6d565b610a3e906001613dc8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905561076e610a6f6040850185613df3565b808060200260200160405190810160405280939291908181526020016000905b828210156106d557610aac60608302860136819003810190613e42565b81526020019060010190610a8f565b600054610100900460ff1615808015610adb5750600054600160ff909116105b80610af55750303b158015610af5575060005460ff166001145b610b585760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104b7565b6000805460ff191660011790558015610b7b576000805461ff0019166101001790555b610b86826000611a12565b610b8f8461198c565b610b9a60ca866118c2565b60ce8054600160401b600160e01b031916600160401b6001600160a01b038616021790558015610c04576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60ce54600160401b90046001600160a01b03163314610c675760405162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba1030b3b3b932b3b0ba37b960411b60448201526064016104b7565b60cd546001600160801b031615610cc05760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420616c726561647920696e697469616c697a656460448201526064016104b7565b610ccb60ca836111e8565b60ce805467ffffffffffffffff19166001600160401b039290921691909117905550565b63ffffffff821660009081526097602090815260408083206001600160401b03851684529091529020545b92915050565b600080609781610d336020870187613eb9565b63ffffffff1663ffffffff1681526020019081526020016000206000856020016020810190610d629190613d6d565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a001358114610dd25760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b60448201526064016104b7565b610e71610de26020850185613798565b602085013583610df56040880188613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e37925050506060890189613ed4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aea92505050565b949350505050565b600081815260ca60205260408120546001600160801b0316610d1a565b610e9e61118e565b6001600160a01b038116610f035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b7565b6104c98161198c565b610f1461118e565b60ce80546001600160a01b03909216600160401b02600160401b600160e01b0319909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb79190613c9c565b6001600160a01b0316336001600160a01b031614610fe75760405162461bcd60e51b81526004016104b790613cb9565b6066541981196066541916146110605760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016104b7565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016105ee565b6001600160a01b0381166111255760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016104b7565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633146109945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b7565b6111f0613689565b60408051808201909152600184015481526002840154602082015260038401546001600160801b031660005b84518110156113b65784818151811061123757611237613f1a565b6020026020010151935060006112628560000151805160009081526020918201519091526040902090565b60008181526020898152604090912054908701519192506001600160801b0390811691168114156112ce5760405162461bcd60e51b81526020600482015260166024820152754f70657261746f7220697320757020746f206461746560501b60448201526064016104b7565b60208601516112dd8286613f30565b6112e79190613f58565b6020878101516000858152918b9052604090912080546001600160801b0319166001600160801b03928316179055909450811661133257855161132b908690611c25565b945061135e565b60208601516001600160801b031661135e5761135b6113548760000151611cbc565b8690611c25565b94505b6020808701516040516001600160801b03909116815283917f7714c619c02393ccf44c3de606bec5c80ae7a6077504b74887fb39f335e98adc910160405180910390a2505080806113ae90613f7a565b91505061121c565b506003850180546001600160801b0319166001600160801b039290921691909117905580516001850155602001516002909301929092555050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016114259190613f95565b60405160208183030381529060405280519060200120604051602001611455929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820181905260038501549091906001600160801b0316806114e65760405162461bcd60e51b815260206004820181905260248201527f4f70657261746f722073657420776173206e6f7420696e697469616c697a656460448201526064016104b7565b60006114f28580613fff565b90506001600160401b0381111561150b5761150b613a5d565b604051908082528060200260200182016040528015611534578160200160208202803683370190505b50905060005b6115448680613fff565b905081101561171d5761159761155a8780613fff565b8381811061156a5761156a613f1a565b9050604002018036038101906115809190614048565b805160009081526020918201519091526040902090565b8282815181106115a9576115a9613f1a565b6020908102919091010152801561164057816115c6600183614064565b815181106115d6576115d6613f1a565b602002602001015160001c8282815181106115f3576115f3613f1a565b602002602001015160001c116116405760405162461bcd60e51b8152602060048201526012602482015271141d589ad95e5cc81b9bdd081cdbdc9d195960721b60448201526064016104b7565b600088600001600084848151811061165a5761165a613f1a565b6020908102919091018101518252810191909152604001600020546001600160801b03169050806116c85760405162461bcd60e51b815260206004820152601860248201527713dc195c985d1bdc881a185cc81e995c9bc81dd95a59da1d60421b60448201526064016104b7565b6116fb6116d58880613fff565b848181106116e5576116e5613f1a565b9050604002018036038101906113549190614048565b94506117078185614064565b935050808061171590613f7a565b91505061153a565b5061174b61172a84611cbc565b6040805180820190915260018a0154815260028a0154602082015290611c25565b925060008061177e8886611767368b90038b0160208c016140ea565b611779368c90038c0160a08d01614048565b611d4b565b91509150816117cf5760405162461bcd60e51b815260206004820152601e60248201527f50616972696e6720707265636f6d70696c652063616c6c206661696c6564000060448201526064016104b7565b806118135760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016104b7565b6003890154606490611837906001600160801b03600160801b820481169116614129565b611841919061416e565b6001600160801b0316841015955050505050505b9392505050565b63ffffffff831660008181526097602090815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b60646001600160801b038216111561192e5760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016104b7565b6003820180546001600160801b03808416600160801b810291909216179091556040517f2b71b2179969a005ac6fd9c196134b364ff40069a17dd72faa96c4a00e73e9f490600090a25050565b8161198684826106ea565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f826040516020016114259190614194565b6065546001600160a01b0316158015611a3357506001600160a01b03821615155b611ab55760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016104b7565b6066819055604051818152339060008051602061439f8339815191529060200160405180910390a2611ae682611097565b5050565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611b2a906034016040516020818303038152906040528688611eaa565b9150915081611b745760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016104b7565b6000611b7f82611ed3565b9050600080611bb48a604051602001611b9a91815260200190565b604051602081830303815290604052888560400151611eaa565b9150915081611c055760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f742065786973740000000060448201526064016104b7565b611c16611c1182611f97565b611faa565b9b9a5050505050505050505050565b611c2d61366f565b611c356136a9565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa9050808015611c7457611c76565bfe5b5080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016104b7565b505092915050565b611cc461366f565b8151158015611cd557506020820151155b15611cf3575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206143bf8339815191528460200151611d26919061426c565b611d3e906000805160206143bf833981519152614064565b905292915050565b919050565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110611d9357611d93613f1a565b60200201518951600160200201518a60200151600060028110611db857611db8613f1a565b60200201518b60200151600160028110611dd457611dd4613f1a565b602090810291909101518c518d830151604051611e319a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c611e54919061426c565b9050611e9c611e666113548884611fd9565b611e6e612055565b611e92611e8385611e7d612115565b90611fd9565b611e8c8c612136565b90611c25565b886201d4c06121ba565b909890975095505050505050565b600060606000611eb9866123de565b9050611ec6818686612410565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611f00836124eb565b90506040518060800160405280611f3083600081518110611f2357611f23613f1a565b60200260200101516124fe565b8152602001611f4b83600181518110611f2357611f23613f1a565b8152602001611f7383600281518110611f6657611f66613f1a565b6020026020010151612505565b8152602001611f8e83600381518110611f6657611f66613f1a565b90529392505050565b6060610d1a611fa5836125a7565b6125d4565b6000806000602084511115611fc0576020611fc3565b83515b60209485015194036008029390931c9392505050565b611fe161366f565b611fe96136c7565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa9050808015611c74575080611cb45760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016104b7565b61205d6136e5565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b61211d61366f565b5060408051808201909152600181526002602082015290565b61213e61366f565b6000808061215a6000805160206143bf8339815191528661426c565b90505b6121668161265f565b90935091506000805160206143bf8339815191528283098314156121a0576040805180820190915290815260208101919091529392505050565b6000805160206143bf83398151915260018208905061215d565b6040805180820182528681526020808201869052825180840190935286835282018490526000918291906121ec61370a565b60005b60028110156123b1576000612205826006614280565b905084826002811061221957612219613f1a565b6020020151518361222b83600061429f565b600c811061223b5761223b613f1a565b602002015284826002811061225257612252613f1a565b60200201516020015183826001612269919061429f565b600c811061227957612279613f1a565b602002015283826002811061229057612290613f1a565b60200201515151836122a383600261429f565b600c81106122b3576122b3613f1a565b60200201528382600281106122ca576122ca613f1a565b60200201515160016020020151836122e383600361429f565b600c81106122f3576122f3613f1a565b602002015283826002811061230a5761230a613f1a565b60200201516020015160006002811061232557612325613f1a565b60200201518361233683600461429f565b600c811061234657612346613f1a565b602002015283826002811061235d5761235d613f1a565b60200201516020015160016002811061237857612378613f1a565b60200201518361238983600561429f565b600c811061239957612399613f1a565b602002015250806123a981613f7a565b9150506121ef565b506123ba613729565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b606081805190602001206040516020016123fa91815260200190565b6040516020818303038152906040529050919050565b60006060600061241f856126e1565b90506000806000612431848a896127db565b815192955090935091501580806124455750815b6124915760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016104b7565b6000816124ad57604051806020016040528060008152506124d9565b6124d9866124bc600188614064565b815181106124cc576124cc613f1a565b6020026020010151612bff565b919b919a509098505050505050505050565b6060610d1a6124f9836125a7565b612c29565b6000610d1a825b600060218260000151111561252c5760405162461bcd60e51b81526004016104b7906142b7565b600080600061253a85612e0f565b919450925090506000816001811115612555576125556142ee565b146125725760405162461bcd60e51b81526004016104b7906142b7565b6000838660200151612584919061429f565b8051909150602084101561089b5760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006125e485612e0f565b9194509250905060008160018111156125ff576125ff6142ee565b146126475760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b60448201526064016104b7565b61265685602001518484613145565b95945050505050565b600080806000805160206143bf83398151915260036000805160206143bf833981519152866000805160206143bf8339815191528889090908905060006126d5827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206143bf833981519152613223565b91959194509092505050565b606060006126ee836124eb565b9050600081516001600160401b0381111561270b5761270b613a5d565b60405190808252806020026020018201604052801561275057816020015b60408051808201909152606080825260208201528152602001906001900390816127295790505b50905060005b82518110156127d357600061278384838151811061277657612776613f1a565b60200260200101516125d4565b9050604051806040016040528082815260200161279f836124eb565b8152508383815181106127b4576127b4613f1a565b60200260200101819052505080806127cb90613f7a565b915050612756565b509392505050565b600060608180806127eb876132cb565b90506000869050600080612812604051806040016040528060608152602001606081525090565b60005b8c51811015612bd7578c818151811061283057612830613f1a565b602002602001015191508284612846919061429f565b935061285360018861429f565b9650836128ab578151805160209091012085146128a65760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016104b7565b612968565b81515160201161290d578151805160209091012085146128a65760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016104b7565b8461291b8360000151613405565b146129685760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016104b7565b6129746010600161429f565b82602001515114156129ed57855184141561298e57612bd7565b60008685815181106129a2576129a2613f1a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129cd576129cd613f1a565b602002602001015190506129e08161342d565b9650600194505050612bc5565b60028260200151511415612b7d576000612a0683613463565b9050600081600081518110612a1d57612a1d613f1a565b016020015160f81c90506000612a34600283614304565b612a3f906002614326565b90506000612a50848360ff16613487565b90506000612a5e8b8a613487565b90506000612a6c83836134bd565b905060ff851660021480612a83575060ff85166003145b15612abd57808351148015612a985750808251145b15612aaa57612aa7818b61429f565b99505b50600160ff1b9950612bd7945050505050565b60ff85161580612ad0575060ff85166001145b15612b265782518114612af05750600160ff1b9950612bd7945050505050565b612b178860200151600181518110612b0a57612b0a613f1a565b602002602001015161342d565b9a509750612bc5945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016104b7565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016104b7565b80612bcf81613f7a565b915050612815565b50600160ff1b841486612bea8786613487565b909e909d50909b509950505050505050505050565b60208101518051606091610d1a91612c1990600190614064565b8151811061277657612776613f1a565b6060600080612c3784612e0f565b91935090915060019050816001811115612c5357612c536142ee565b14612c9a5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b60448201526064016104b7565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612cb35790505090506000835b8651811015612e045760208210612d4c5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016104b7565b600080612d896040518060400160405280858c60000151612d6d9190614064565b8152602001858c60200151612d82919061429f565b9052612e0f565b509150915060405180604001604052808383612da5919061429f565b8152602001848b60200151612dba919061429f565b815250858581518110612dcf57612dcf613f1a565b6020908102919091010152612de560018561429f565b9350612df1818361429f565b612dfb908461429f565b92505050612ce0565b508152949350505050565b600080600080846000015111612e625760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b60448201526064016104b7565b6020840151805160001a607f8111612e8757600060016000945094509450505061313e565b60b78111612eff576000612e9c608083614064565b905080876000015111612eed5760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b60448201526064016104b7565b6001955093506000925061313e915050565b60bf8111612fe9576000612f1460b783614064565b905080876000015111612f695760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016104b7565b600183015160208290036101000a9004612f83818361429f565b885111612fcd5760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b60448201526064016104b7565b612fd882600161429f565b965094506000935061313e92505050565b60f7811161305e576000612ffe60c083614064565b90508087600001511161304d5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b60448201526064016104b7565b60019550935084925061313e915050565b600061306b60f783614064565b9050808760000151116130c05760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016104b7565b600183015160208290036101000a90046130da818361429f565b8851116131225760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016104b7565b61312d82600161429f565b965094506001935061313e92505050565b9193909250565b60606000826001600160401b0381111561316157613161613a5d565b6040519080825280601f01601f19166020018201604052801561318b576020820181803683370190505b50905080516000141561319f579050611855565b60006131ab858761429f565b90506020820160005b6131bf602087614349565b8110156131f657825182526131d560208461429f565b92506131e260208361429f565b9150806131ee81613f7a565b9150506131b4565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60008061322e613729565b613236613747565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828015611c745750826132c05760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016104b7565b505195945050505050565b60606000825160026132dd9190614280565b6001600160401b038111156132f4576132f4613a5d565b6040519080825280601f01601f19166020018201604052801561331e576020820181803683370190505b50905060005b83518110156133fe57600484828151811061334157613341613f1a565b01602001516001600160f81b031916901c8261335e836002614280565b8151811061336e5761336e613f1a565b60200101906001600160f81b031916908160001a905350601084828151811061339957613399613f1a565b01602001516133ab919060f81c614304565b60f81b826133ba836002614280565b6133c590600161429f565b815181106133d5576133d5613f1a565b60200101906001600160f81b031916908160001a905350806133f681613f7a565b915050613324565b5092915050565b600060208251101561341957506020015190565b81806020019051810190610d1a919061435d565b6000606060208360000151101561344e5761344783613539565b905061345a565b613457836125d4565b90505b61185581613405565b6060610d1a613482836020015160008151811061277657612776613f1a565b6132cb565b6060825182106134a65750604080516020810190915260008152610d1a565b61185583838486516134b89190614064565b613544565b6000805b8084511180156134d15750808351115b801561352257508281815181106134ea576134ea613f1a565b602001015160f81c60f81b6001600160f81b03191684828151811061351157613511613f1a565b01602001516001600160f81b031916145b15611855578061353181613f7a565b9150506134c1565b6060610d1a82613659565b60608161355281601f61429f565b10156135705760405162461bcd60e51b81526004016104b790614376565b8261357b838261429f565b10156135995760405162461bcd60e51b81526004016104b790614376565b6135a3828461429f565b845110156135e75760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016104b7565b6060821580156136065760405191506000825260208201604052613650565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561363f578051835260209283019201613627565b5050858452601f01601f1916604052505b50949350505050565b6060610d1a826020015160008460000151613145565b604051806040016040528060008152602001600081525090565b604051806040016040528061369c61366f565b8152600060209091015290565b60405180608001604052806004906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806136f8613765565b8152602001613705613765565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146104c957600080fd5b6000602082840312156137aa57600080fd5b813561185581613783565b6000602082840312156137c757600080fd5b5035919050565b6000606082840312156137e057600080fd5b50919050565b6000602082840312156137f857600080fd5b81356001600160401b0381111561380e57600080fd5b610e71848285016137ce565b600060c082840312156137e057600080fd5b600060e082840312156137e057600080fd5b60008060e0838503121561385157600080fd5b61385b848461381a565b915060c08301356001600160401b0381111561387657600080fd5b6138828582860161382c565b9150509250929050565b6001600160a01b0391909116815260200190565b80356001600160801b0381168114611d4657600080fd5b6000602082840312156138c957600080fd5b611855826138a0565b6000608082840312156137e057600080fd5b60008060008061010085870312156138fb57600080fd5b613905868661381a565b935060c08501356001600160401b038082111561392157600080fd5b61392d888389016138d2565b945060e087013591508082111561394357600080fd5b818701915087601f83011261395757600080fd5b81358181111561396657600080fd5b88602082850101111561397857600080fd5b95989497505060200194505050565b60006020828403121561399957600080fd5b813560ff8116811461185557600080fd5b600080604083850312156139bd57600080fd5b82356001600160401b03808211156139d457600080fd5b6139e0868387016137ce565b935060208501359150808211156139f657600080fd5b506138828582860161382c565b60008060008060808587031215613a1957600080fd5b613a22856138a0565b93506020850135613a3281613783565b92506040850135613a4281613783565b91506060850135613a5281613783565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a9557613a95613a5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613ac357613ac3613a5d565b604052919050565b600060408284031215613add57600080fd5b613ae5613a73565b9050813581526020820135602082015292915050565b600060608284031215613b0d57600080fd5b613b15613a73565b9050613b218383613acb565b8152613b2f604083016138a0565b602082015292915050565b80356001600160401b0381168114611d4657600080fd5b60008060408385031215613b6457600080fd5b82356001600160401b0380821115613b7b57600080fd5b818501915085601f830112613b8f57600080fd5b8135602082821115613ba357613ba3613a5d565b613bb1818360051b01613a9b565b82815281810193506060928302850182019289841115613bd057600080fd5b948201945b83861015613bf657613be78a87613afb565b85529485019493820193613bd5565b509550613c04878201613b3a565b9450505050509250929050565b803563ffffffff81168114611d4657600080fd5b60008060408385031215613c3857600080fd5b613c4183613c11565b9150613c4f60208401613b3a565b90509250929050565b60008060e08385031215613c6b57600080fd5b613c75848461381a565b915060c08301356001600160401b03811115613c9057600080fd5b613882858286016138d2565b600060208284031215613cae57600080fd5b815161185581613783565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b600060208284031215613d1557600080fd5b8151801515811461185557600080fd5b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b600060208284031215613d7f57600080fd5b61185582613b3a565b60208082526010908201526f15dc9bdb99c81b595cdcd859d948125160821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001600160401b03808316818516808303821115613dea57613dea613db2565b01949350505050565b6000808335601e19843603018112613e0a57600080fd5b8301803591506001600160401b03821115613e2457600080fd5b6020019150606081023603821315613e3b57600080fd5b9250929050565b600060608284031215613e5457600080fd5b6118558383613afb565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6020808252600e908201526d145d5bdc9d5b481b9bdd081b595d60921b604082015260600190565b600060208284031215613ecb57600080fd5b61185582613c11565b6000808335601e19843603018112613eeb57600080fd5b8301803591506001600160401b03821115613f0557600080fd5b602001915036819003821315613e3b57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0383811690831681811015613f5057613f50613db2565b039392505050565b60006001600160801b03828116848216808303821115613dea57613dea613db2565b6000600019821415613f8e57613f8e613db2565b5060010190565b60c0810163ffffffff613fa784613c11565b168252613fb660208401613b3a565b6001600160401b03808216602085015280613fd360408701613b3a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b6000808335601e1984360301811261401657600080fd5b8301803591506001600160401b0382111561403057600080fd5b6020019150600681901b3603821315613e3b57600080fd5b60006040828403121561405a57600080fd5b6118558383613acb565b60008282101561407657614076613db2565b500390565b600082601f83011261408c57600080fd5b604051604081018181106001600160401b03821117156140ae576140ae613a5d565b80604052508060408401858111156140c557600080fd5b845b818110156140df5780358352602092830192016140c7565b509195945050505050565b6000608082840312156140fc57600080fd5b614104613a73565b61410e848461407b565b815261411d846040850161407b565b60208201529392505050565b60006001600160801b038281168482168115158284048211161561414f5761414f613db2565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038381168061418857614188614158565b92169190910492915050565b60006020808352608083016001600160401b03806141b187613b3a565b16838601526141c1838701613b3a565b604082821681880152808801359150601e198836030182126141e257600080fd5b908701908135838111156141f557600080fd5b60609350838102360389131561420a57600080fd5b87840184905293849052908401926000919060a088015b8184101561425f578535815286860135878201526001600160801b036142488488016138a0565b168184015294840194600193909301928401614221565b9998505050505050505050565b60008261427b5761427b614158565b500690565b600081600019048311821515161561429a5761429a613db2565b500290565b600082198211156142b2576142b2613db2565b500190565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061431757614317614158565b8060ff84160691505092915050565b600060ff821660ff84168082101561434057614340613db2565b90039392505050565b60008261435857614358614158565b500490565b60006020828403121561436f57600080fd5b5051919050565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220fdfa99bdec7bb54cf2840cc043d0340ddf6031f4ac0ec2cdb06fff0ff26140c564736f6c634300080c0033", } // ContractSFFLRegistryRollupABI is the input ABI used to generate the binding from. @@ -822,6 +822,27 @@ func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupTransactorSession) return _ContractSFFLRegistryRollup.Contract.RenounceOwnership(&_ContractSFFLRegistryRollup.TransactOpts) } +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupTransactor) SetAggregator(opts *bind.TransactOpts, _aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLRegistryRollup.contract.Transact(opts, "setAggregator", _aggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupSession) SetAggregator(_aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLRegistryRollup.Contract.SetAggregator(&_ContractSFFLRegistryRollup.TransactOpts, _aggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLRegistryRollup *ContractSFFLRegistryRollupTransactorSession) SetAggregator(_aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLRegistryRollup.Contract.SetAggregator(&_ContractSFFLRegistryRollup.TransactOpts, _aggregator) +} + // SetInitialOperatorSet is a paid mutator transaction binding the contract method 0xb128aeee. // // Solidity: function setInitialOperatorSet(((uint256,uint256),uint128)[] operators, uint64 _nextOperatorUpdateId) returns() diff --git a/contracts/bindings/SFFLServiceManager/binding.go b/contracts/bindings/SFFLServiceManager/binding.go index ea373c7e..023787a9 100644 --- a/contracts/bindings/SFFLServiceManager/binding.go +++ b/contracts/bindings/SFFLServiceManager/binding.go @@ -81,7 +81,7 @@ type StateRootUpdateMessage struct { // ContractSFFLServiceManagerMetaData contains all meta data concerning the ContractSFFLServiceManager contract. var ContractSFFLServiceManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"_registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"_stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"},{\"name\":\"_taskManager\",\"type\":\"address\",\"internalType\":\"contractSFFLTaskManager\"},{\"name\":\"_operatorSetUpdateRegistry\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_UPDATE_STATE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"freezeOperator\",\"inputs\":[{\"name\":\"operatorAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStateRoot\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSetUpdateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSFFLOperatorSetUpdateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"taskManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSFFLTaskManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAndGetStorageValue\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proofParams\",\"type\":\"tuple\",\"internalType\":\"structSFFLRegistryBase.ProofParams\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"storageKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"storageTrieWitness\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"agreement\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateStateRoot\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StateRootUpdated\",\"inputs\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b50604051620043ef380380620043ef833981016040819052620000359162000156565b6001600160a01b0380861660c052808516608052831660a0528484846200005b6200007b565b5050506001600160a01b0391821660e052166101005250620001d6915050565b603354610100900460ff1615620000e85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff90811610156200013b576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200015357600080fd5b50565b600080600080600060a086880312156200016f57600080fd5b85516200017c816200013d565b60208701519095506200018f816200013d565b6040870151909450620001a2816200013d565b6060870151909350620001b5816200013d565b6080870151909250620001c8816200013d565b809150509295509295909350565b60805160a05160c05160e0516101005161414f620002a0600039600081816101d20152610ee201526000818161032801528181610c71015281816118b901526118ff0152600081816102ad015281816110030152818161108c0152611e0001526000818161099101528181610aec01528181610b83015281816113e601528181611569015261160801526000818161079801528181610847015281816108c701528181610e8e01528181610faf01528181611324015281816114c40152611dac015261414f6000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a0366004613362565b6103c4565b005b6101a56101b53660046133cd565b610494565b6101a56101c83660046133ea565b610547565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516101899190613403565b61021461020f366004613429565b610674565b604051908152602001610189565b6102356102303660046133cd565b610792565b60405161018991906134cc565b6101a56102503660046133cd565b610c66565b6101a5610263366004613519565b610cde565b6101a5610db5565b61029361027e366004613556565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f00000000000000000000000000000000000000000000000000000000000000006101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b366004613626565b610e83565b6101a561031e3660046133cd565b610fa4565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6101a56103583660046136d0565b61106d565b61021461036b366004613746565b6110c1565b6101a561037e3660046133cd565b6110f0565b61021461039136600461377b565b6111c6565b61023561131e565b6101a56103ac3660046133cd565b6116e7565b6101a56103bf3660046133ea565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f61047560208501856137c9565b61048560408601602087016137e6565b8560a001356119f3565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190613801565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061381e565b61054481611a57565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613403565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190613878565b6105d45760405162461bcd60e51b815260040161041590613893565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233906000805160206140fa833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e460208901896137c9565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061071391906137e6565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4e565b61078886866111c6565b9695505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613403565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906138db565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906138f4565b90506001600160c01b038116158061094c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610947919061391d565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5f565b90506000805b8251811015610a56577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f58483815181106109d0576109d061393a565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906138db565b610a429083613966565b915080610a4e8161397e565b915050610986565b506000816001600160401b03811115610a7157610a71613573565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe61393a565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906138db565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190613999565b60000151868681518110610c0b57610c0b61393a565b6001600160a01b039092166020928302919091019091015284610c2d8161397e565b9550508080610c3b9061397e565b915050610b5c565b5050508080610c519061397e565b915050610aa1565b5090979650505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c21565b610d6b826000611c73565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613403565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613878565b610e425760405162461bcd60e51b815260040161041590613893565b60001960cb81905560405190815233906000805160206140fa8339815191529060200160405180910390a2565b610e77611d47565b610e816000611c21565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ecb5760405162461bcd60e51b815260040161041590613a56565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e8da82990610f17908590600401613403565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613878565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da1565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fec5760405162461bcd60e51b815260040161041590613a56565b6040516351b27a6d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90611038908490600401613403565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d47565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611038908490600401613b1b565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6d565b61117d600080611c73565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d860208701876137c9565b63ffffffff1663ffffffff168152602001908152602001600020600085602001602081019061120791906137e6565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b61131661128760208501856133cd565b60208501358361129a6040880188613b2e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613b2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed892505050565b949350505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a4919061391d565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906138db565b6114639083613966565b91508061146f8161397e565b9150506113c6565b506000816001600160401b0381111561149257611492613573565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061391d565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906138db565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190613999565b600001518585815181106116905761169061393a565b6001600160a01b0390921660209283029190910190910152836116b28161397e565b94505080806116c09061397e565b9150506115e1565b505080806116d59061397e565b9150506114c2565b5090949350505050565b6116ef611d47565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c21565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190613801565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061381e565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663292f7a4e6118ef86612015565b6118fa600143613b7b565b8660037f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613b92565b61198a906002613baf565b6119949190613bf1565b6040518563ffffffff1660e01b81526004016119b39493929190613da8565b6040805180830381865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190613f07565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5984826103c4565b50505050565b6060600080611b6d84612096565b61ffff166001600160401b03811115611b8857611b88613573565b6040519080825280601f01601f191660200182016040528015611bb2576020820181803683370190505b5090506000805b825182108015611bca575061010081105b156116dd576001811b935085841615611c11578060f81b838381518110611bf357611bf361393a565b60200101906001600160f81b031916908160001a9053508160010191505b611c1a8161397e565b9050611bb9565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9457506001600160a01b03821615155b611d165760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb81905560405181815233906000805160206140fa8339815191529060200160405180910390a2610fa082611a57565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611de95760405162461bcd60e51b815260040161041590613a56565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611e379085908590600401613f33565b600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f189060340160405160208183030381529060405286886120c1565b9150915081611f625760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6d826120ea565b9050600080611fa28a604051602001611f8891815260200190565b6040516020818303038152906040528885604001516120c1565b9150915081611ff35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612004611fff826121ae565b6121c1565b955050505050505b95945050505050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016120499190613f7e565b60405160208183030381529060405280519060200120604051602001612079929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000805b82156110ea576120ab600184613b7b565b90921691806120b981613fea565b91505061209a565b6000606060006120d0866121f0565b90506120dd818686612222565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290612117836122fd565b905060405180608001604052806121478360008151811061213a5761213a61393a565b6020026020010151612310565b81526020016121628360018151811061213a5761213a61393a565b815260200161218a8360028151811061217d5761217d61393a565b6020026020010151612317565b81526020016121a58360038151811061217d5761217d61393a565b90529392505050565b60606110ea6121bc836123b9565b6123e6565b60008060006020845111156121d75760206121da565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161220c91815260200190565b6040516020818303038152906040529050919050565b60006060600061223185612468565b90506000806000612243848a89612562565b815192955090935091501580806122575750815b6122a35760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b6000816122bf57604051806020016040528060008152506122eb565b6122eb866122ce600188613b7b565b815181106122de576122de61393a565b6020026020010151612986565b919b919a509098505050505050505050565b60606110ea61230b836123b9565b6129b0565b60006110ea825b600060218260000151111561233e5760405162461bcd60e51b81526004016104159061400c565b600080600061234c85612b96565b91945092509050600081600181111561236757612367614043565b146123845760405162461bcd60e51b81526004016104159061400c565b60008386602001516123969190613966565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006123f685612b96565b91945092509050600081600181111561241157612411614043565b146124595760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200c85602001518484612ecc565b60606000612475836122fd565b9050600081516001600160401b0381111561249257612492613573565b6040519080825280602002602001820160405280156124d757816020015b60408051808201909152606080825260208201528152602001906001900390816124b05790505b50905060005b825181101561255a57600061250a8483815181106124fd576124fd61393a565b60200260200101516123e6565b90506040518060400160405280828152602001612526836122fd565b81525083838151811061253b5761253b61393a565b60200260200101819052505080806125529061397e565b9150506124dd565b509392505050565b6000606081808061257287612fa7565b90506000869050600080612599604051806040016040528060608152602001606081525090565b60005b8c5181101561295e578c81815181106125b7576125b761393a565b6020026020010151915082846125cd9190613966565b93506125da600188613966565b9650836126325781518051602090910120851461262d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b6126ef565b8151516020116126945781518051602090910120851461262d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b846126a283600001516130e1565b146126ef5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b6126fb60106001613966565b82602001515114156127745785518414156127155761295e565b60008685815181106127295761272961393a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106127545761275461393a565b6020026020010151905061276781613109565b965060019450505061294c565b6002826020015151141561290457600061278d8361313f565b90506000816000815181106127a4576127a461393a565b016020015160f81c905060006127bb600283614059565b6127c690600261407b565b905060006127d7848360ff16613163565b905060006127e58b8a613163565b905060006127f38383613199565b905060ff85166002148061280a575060ff85166003145b156128445780835114801561281f5750808251145b156128315761282e818b613966565b99505b50600160ff1b995061295e945050505050565b60ff85161580612857575060ff85166001145b156128ad57825181146128775750600160ff1b995061295e945050505050565b61289e88602001516001815181106128915761289161393a565b6020026020010151613109565b9a50975061294c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806129568161397e565b91505061259c565b50600160ff1b8414866129718786613163565b909e909d50909b509950505050505050505050565b602081015180516060916110ea916129a090600190613b7b565b815181106124fd576124fd61393a565b60606000806129be84612b96565b919350909150600190508160018111156129da576129da614043565b14612a215760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612a3a5790505090506000835b8651811015612b8b5760208210612ad35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612b106040518060400160405280858c60000151612af49190613b7b565b8152602001858c60200151612b099190613966565b9052612b96565b509150915060405180604001604052808383612b2c9190613966565b8152602001848b60200151612b419190613966565b815250858581518110612b5657612b5661393a565b6020908102919091010152612b6c600185613966565b9350612b788183613966565b612b829084613966565b92505050612a67565b508152949350505050565b600080600080846000015111612be95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612c0e576000600160009450945094505050612ec5565b60b78111612c86576000612c23608083613b7b565b905080876000015111612c745760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612ec5915050565b60bf8111612d70576000612c9b60b783613b7b565b905080876000015111612cf05760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612d0a8183613966565b885111612d545760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612d5f826001613966565b9650945060009350612ec592505050565b60f78111612de5576000612d8560c083613b7b565b905080876000015111612dd45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612ec5915050565b6000612df260f783613b7b565b905080876000015111612e475760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612e618183613966565b885111612ea95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612eb4826001613966565b9650945060019350612ec592505050565b9193909250565b60606000826001600160401b03811115612ee857612ee8613573565b6040519080825280601f01601f191660200182016040528015612f12576020820181803683370190505b509050805160001415612f26579050612fa0565b6000612f328587613966565b90506020820160005b612f4660208761409e565b811015612f7d5782518252612f5c602084613966565b9250612f69602083613966565b915080612f758161397e565b915050612f3b565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6060600082516002612fb991906140b2565b6001600160401b03811115612fd057612fd0613573565b6040519080825280601f01601f191660200182016040528015612ffa576020820181803683370190505b50905060005b83518110156130da57600484828151811061301d5761301d61393a565b01602001516001600160f81b031916901c8261303a8360026140b2565b8151811061304a5761304a61393a565b60200101906001600160f81b031916908160001a90535060108482815181106130755761307561393a565b0160200151613087919060f81c614059565b60f81b826130968360026140b2565b6130a1906001613966565b815181106130b1576130b161393a565b60200101906001600160f81b031916908160001a905350806130d28161397e565b915050613000565b5092915050565b60006020825110156130f557506020015190565b818060200190518101906110ea91906138db565b6000606060208360000151101561312a5761312383613215565b9050613136565b613133836123e6565b90505b612fa0816130e1565b60606110ea61315e83602001516000815181106124fd576124fd61393a565b612fa7565b60608251821061318257506040805160208101909152600081526110ea565b612fa083838486516131949190613b7b565b613220565b6000805b8084511180156131ad5750808351115b80156131fe57508281815181106131c6576131c661393a565b602001015160f81c60f81b6001600160f81b0319168482815181106131ed576131ed61393a565b01602001516001600160f81b031916145b15612fa0578061320d8161397e565b91505061319d565b60606110ea82613334565b60608161322e81601f613966565b101561324c5760405162461bcd60e51b8152600401610415906140d1565b826132578382613966565b10156132755760405162461bcd60e51b8152600401610415906140d1565b61327f8284613966565b845110156132c35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b6060821580156132e25760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561331b578051835260209283019201613303565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612ecc565b600060c0828403121561335c57600080fd5b50919050565b60008060e0838503121561337557600080fd5b61337f848461334a565b915060c08301356001600160401b0381111561339a57600080fd5b830161018081860312156133ad57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b6000602082840312156133df57600080fd5b8135612fa0816133b8565b6000602082840312156133fc57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006080828403121561335c57600080fd5b600080600080610100858703121561344057600080fd5b61344a868661334a565b935060c08501356001600160401b038082111561346657600080fd5b61347288838901613417565b945060e087013591508082111561348857600080fd5b818701915087601f83011261349c57600080fd5b8135818111156134ab57600080fd5b8860208285010111156134bd57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561350d5783516001600160a01b0316835292840192918401916001016134e8565b50909695505050505050565b6000806040838503121561352c57600080fd5b8235613537816133b8565b915060208301356133ad816133b8565b60ff8116811461054457600080fd5b60006020828403121561356857600080fd5b8135612fa081613547565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156135ab576135ab613573565b60405290565b60006001600160401b03808411156135cb576135cb613573565b604051601f8501601f19908116603f011681019082821181831017156135f3576135f3613573565b8160405280935085815286868601111561360c57600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561363957600080fd5b8235613644816133b8565b915060208301356001600160401b038082111561366057600080fd5b908401906060828703121561367457600080fd5b61367c613589565b82358281111561368b57600080fd5b83019150601f8201871361369e57600080fd5b6136ad878335602085016135b1565b815260208301356020820152604083013560408201528093505050509250929050565b6000602082840312156136e257600080fd5b81356001600160401b038111156136f857600080fd5b8201601f8101841361370957600080fd5b611316848235602084016135b1565b63ffffffff8116811461054457600080fd5b80356001600160401b038116811461374157600080fd5b919050565b6000806040838503121561375957600080fd5b823561376481613718565b91506137726020840161372a565b90509250929050565b60008060e0838503121561378e57600080fd5b613798848461334a565b915060c08301356001600160401b038111156137b357600080fd5b6137bf85828601613417565b9150509250929050565b6000602082840312156137db57600080fd5b8135612fa081613718565b6000602082840312156137f857600080fd5b612fa08261372a565b60006020828403121561381357600080fd5b8151612fa0816133b8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b8051801515811461374157600080fd5b60006020828403121561388a57600080fd5b612fa082613868565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156138ed57600080fd5b5051919050565b60006020828403121561390657600080fd5b81516001600160c01b0381168114612fa057600080fd5b60006020828403121561392f57600080fd5b8151612fa081613547565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561397957613979613950565b500190565b600060001982141561399257613992613950565b5060010190565b6000604082840312156139ab57600080fd5b604051604081018181106001600160401b03821117156139cd576139cd613573565b60405282516139db816133b8565b815260208301516bffffffffffffffffffffffff811681146139fc57600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613af457602081850181015186830182015201613ad8565b81811115613b06576000602083870101525b50601f01601f19169290920160200192915050565b602081526000612fa06020830184613ace565b6000808335601e19843603018112613b4557600080fd5b8301803591506001600160401b03821115613b5f57600080fd5b602001915036819003821315613b7457600080fd5b9250929050565b600082821015613b8d57613b8d613950565b500390565b600060208284031215613ba457600080fd5b8151612fa081613718565b600063ffffffff80831681851681830481118215151615613bd257613bd2613950565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613c0857613c08613bdb565b92169190910492915050565b6000808335601e19843603018112613c2b57600080fd5b83016020810192503590506001600160401b03811115613c4a57600080fd5b8060051b3603831315613b7457600080fd5b8183526000602080850194508260005b85811015613c97578135613c7f81613718565b63ffffffff1687529582019590820190600101613c6c565b509495945050505050565b6000808335601e19843603018112613cb957600080fd5b83016020810192503590506001600160401b03811115613cd857600080fd5b8060061b3603831315613b7457600080fd5b81835260208301925060008160005b84811015613d2157813586526020808301359087015260409586019590910190600101613cf9565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d9b578284038952613d7c8288613c14565b613d87868284613c5c565b9a87019a9550505090840190600101613d65565b5091979650505050505050565b84815260a06020820152600160a0820152600060c082015263ffffffff8416604082015260e060608201526000613ddf8485613c14565b61018060e0850152613df661026085018284613c5c565b915050613e066020860186613ca2565b60df198086850301610100870152613e1f848385613cea565b9350613e2e6040890189613ca2565b93509150610120818786030181880152613e49858585613cea565b94506101409350613e5f84880160608b01613d2b565b60e08901356101c08801526101008901356101e0880152613e82818a018a613c14565b935090508187860301610200880152613e9c858483613c5c565b945050613eab83890189613c14565b935091508086850301610220870152613ec5848484613c5c565b9350613ed5610160890189613c14565b93509150808685030161024087015250613ef0838383613d4b565b935050505061200c608083018463ffffffff169052565b60008060408385031215613f1a57600080fd5b613f2383613868565b9150602083015190509250929050565b60018060a01b0383168152604060208201526000825160606040840152613f5d60a0840182613ace565b90506020840151606084015260408401516080840152809150509392505050565b60c081018235613f8d81613718565b63ffffffff168252613fa16020840161372a565b6001600160401b03808216602085015280613fbe6040870161372a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b600061ffff8083168181141561400257614002613950565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061406c5761406c613bdb565b8060ff84160691505092915050565b600060ff821660ff84168082101561409557614095613950565b90039392505050565b6000826140ad576140ad613bdb565b500490565b60008160001904831182151516156140cc576140cc613950565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da2646970667358221220ff7724f9d223ce2511df9d1e8490fb61186326e243b28f6bbd92b3a9e2d6d92b64736f6c634300080c0033", + Bin: "0x6101206040523480156200001257600080fd5b50604051620043ef380380620043ef833981016040819052620000359162000156565b6001600160a01b0380861660c052808516608052831660a0528484846200005b6200007b565b5050506001600160a01b0391821660e052166101005250620001d6915050565b603354610100900460ff1615620000e85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff90811610156200013b576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200015357600080fd5b50565b600080600080600060a086880312156200016f57600080fd5b85516200017c816200013d565b60208701519095506200018f816200013d565b6040870151909450620001a2816200013d565b6060870151909350620001b5816200013d565b6080870151909250620001c8816200013d565b809150509295509295909350565b60805160a05160c05160e0516101005161414f620002a0600039600081816101d20152610ee201526000818161032801528181610c71015281816118b901526118ff0152600081816102ad015281816110030152818161108c0152611e0001526000818161099101528181610aec01528181610b83015281816113e601528181611569015261160801526000818161079801528181610847015281816108c701528181610e8e01528181610faf01528181611324015281816114c40152611dac015261414f6000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c8063715018a6116100ce578063a98fb35511610087578063a98fb3551461034a578063b3a9e53b1461035d578063c4d66de814610370578063d5d4bb5a14610383578063e481af9d14610396578063f2fde38b1461039e578063fabc1cbc146103b157600080fd5b8063715018a6146102d1578063886f1195146102d95780638da5cb5b146102ec5780639926ee7d146102fd578063a364f4da14610310578063a50a640e1461032357600080fd5b806333cfb7b71161012b57806333cfb7b71461022257806338c8ee6414610242578063485cc95514610255578063595c6a67146102685780635ac86ab7146102705780635c975abb146102a35780636b3aa72e146102ab57600080fd5b80630510c191146101735780630f5af14a1461019257806310d67a2f146101a7578063136439dd146101ba578063268f06e0146101cd5780632f65284e14610201575b600080fd5b61017b600081565b60405160ff90911681526020015b60405180910390f35b6101a56101a0366004613362565b6103c4565b005b6101a56101b53660046133cd565b610494565b6101a56101c83660046133ea565b610547565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6040516101899190613403565b61021461020f366004613429565b610674565b604051908152602001610189565b6102356102303660046133cd565b610792565b60405161018991906134cc565b6101a56102503660046133cd565b610c66565b6101a5610263366004613519565b610cde565b6101a5610db5565b61029361027e366004613556565b60cb54600160ff9092169190911b9081161490565b6040519015158152602001610189565b60cb54610214565b7f00000000000000000000000000000000000000000000000000000000000000006101f4565b6101a5610e6f565b60ca546101f4906001600160a01b031681565b6066546001600160a01b03166101f4565b6101a561030b366004613626565b610e83565b6101a561031e3660046133cd565b610fa4565b6101f47f000000000000000000000000000000000000000000000000000000000000000081565b6101a56103583660046136d0565b61106d565b61021461036b366004613746565b6110c1565b6101a561037e3660046133cd565b6110f0565b61021461039136600461377b565b6111c6565b61023561131e565b6101a56103ac3660046133cd565b6116e7565b6101a56103bf3660046133ea565b61175d565b60cb546000906001908116141561041e5760405162461bcd60e51b815260206004820152601960248201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b60448201526064015b60405180910390fd5b61042883836118b4565b6104655760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b6044820152606401610415565b61048f61047560208501856137c9565b61048560408601602087016137e6565b8560a001356119f3565b505050565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190613801565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b81526004016104159061381e565b61054481611a57565b50565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610577903390600401613403565b602060405180830381865afa158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190613878565b6105d45760405162461bcd60e51b815260040161041590613893565b60cb54818116146106485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233906000805160206140fa833981519152906020015b60405180910390a250565b600060608501351580159061068c5750608085013515155b6106d35760405162461bcd60e51b8152602060048201526018602482015277115b5c1d1e48139150548811104818dbdb5b5a5d1b595b9d60421b6044820152606401610415565b600080806106e460208901896137c9565b63ffffffff1663ffffffff168152602001908152602001600020600087602001602081019061071391906137e6565b6001600160401b0316815260208101919091526040016000205490508061077e57826107735760405162461bcd60e51b815260206004820152600f60248201526e115b5c1d1e481859dc99595b595b9d608a1b6044820152606401610415565b61077e868585611b4e565b61078886866111c6565b9695505050505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166313542a4e846040518263ffffffff1660e01b81526004016107e29190613403565b602060405180830381865afa1580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082391906138db565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa15801561088e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b291906138f4565b90506001600160c01b038116158061094c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610923573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610947919061391d565b60ff16155b1561096c5760408051600080825260208201909252905b50949350505050565b6000610980826001600160c01b0316611b5f565b90506000805b8251811015610a56577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f58483815181106109d0576109d061393a565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906138db565b610a429083613966565b915080610a4e8161397e565b915050610986565b506000816001600160401b03811115610a7157610a71613573565b604051908082528060200260200182016040528015610a9a578160200160208202803683370190505b5090506000805b8451811015610c59576000858281518110610abe57610abe61393a565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906138db565b905060005b81811015610c43576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf59190613999565b60000151868681518110610c0b57610c0b61393a565b6001600160a01b039092166020928302919091019091015284610c2d8161397e565b9550508080610c3b9061397e565b915050610b5c565b5050508080610c519061397e565b915050610aa1565b5090979650505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105445760405162461bcd60e51b815260206004820152601f60248201527f5461736b206d616e61676572206d757374206265207468652063616c6c6572006044820152606401610415565b603354610100900460ff1615808015610cfe5750603354600160ff909116105b80610d185750303b158015610d18575060335460ff166001145b610d345760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015610d57576033805461ff0019166101001790555b610d6083611c21565b610d6b826000611c73565b801561048f576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60ca5460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610de5903390600401613403565b602060405180830381865afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190613878565b610e425760405162461bcd60e51b815260040161041590613893565b60001960cb81905560405190815233906000805160206140fa8339815191529060200160405180910390a2565b610e77611d47565b610e816000611c21565b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ecb5760405162461bcd60e51b815260040161041590613a56565b604051632e8da82960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e8da82990610f17908590600401613403565b602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613878565b610f965760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610415565b610fa08282611da1565b5050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fec5760405162461bcd60e51b815260040161041590613a56565b6040516351b27a6d60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90611038908490600401613403565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b5050505050565b611075611d47565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590611038908490600401613b1b565b63ffffffff82166000908152602081815260408083206001600160401b03851684529091529020545b92915050565b603354610100900460ff16158080156111105750603354600160ff909116105b8061112a5750303b15801561112a575060335460ff166001145b6111465760405162461bcd60e51b815260040161041590613a08565b6033805460ff191660011790558015611169576033805461ff0019166101001790555b61117282611e6d565b61117d600080611c73565b8015610fa0576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008080806111d860208701876137c9565b63ffffffff1663ffffffff168152602001908152602001600020600085602001602081019061120791906137e6565b6001600160401b03166001600160401b031681526020019081526020016000205490508360a0013581146112775760405162461bcd60e51b81526020600482015260176024820152764d69736d61746368696e6720737461746520726f6f747360481b6044820152606401610415565b61131661128760208501856133cd565b60208501358361129a6040880188613b2e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112dc925050506060890189613b2e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ed892505050565b949350505050565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a4919061391d565b60ff169050806113c257505060408051600081526020810190915290565b6000805b8281101561147757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145991906138db565b6114639083613966565b91508061146f8161397e565b9150506113c6565b506000816001600160401b0381111561149257611492613573565b6040519080825280602002602001820160405280156114bb578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611544919061391d565b60ff168110156116dd57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906138db565b905060005b818110156116c8576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190613999565b600001518585815181106116905761169061393a565b6001600160a01b0390921660209283029190910190910152836116b28161397e565b94505080806116c09061397e565b9150506115e1565b505080806116d59061397e565b9150506114c2565b5090949350505050565b6116ef611d47565b6001600160a01b0381166117545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610415565b61054481611c21565b60ca60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190613801565b6001600160a01b0316336001600160a01b0316146118045760405162461bcd60e51b81526004016104159061381e565b60cb5419811960cb5419161461187d5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b6064820152608401610415565b60cb81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610669565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663292f7a4e6118ef86612015565b6118fa600143613b7b565b8660037f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef0244586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613b92565b61198a906002613baf565b6119949190613bf1565b6040518563ffffffff1660e01b81526004016119b39493929190613da8565b6040805180830381865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190613f07565b63ffffffff83166000818152602081815260408083206001600160401b03871680855290835292819020859055518481529192917fca7171570f4ca232f925661b810636124eaf784a25b7c14e6b34c95b814dfdd8910160405180910390a3505050565b6001600160a01b038116611ae55760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a401610415565b60ca54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160ca80546001600160a01b0319166001600160a01b0392909216919091179055565b81611b5984826103c4565b50505050565b6060600080611b6d84612096565b61ffff166001600160401b03811115611b8857611b88613573565b6040519080825280601f01601f191660200182016040528015611bb2576020820181803683370190505b5090506000805b825182108015611bca575061010081105b156116dd576001811b935085841615611c11578060f81b838381518110611bf357611bf361393a565b60200101906001600160f81b031916908160001a9053508160010191505b611c1a8161397e565b9050611bb9565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca546001600160a01b0316158015611c9457506001600160a01b03821615155b611d165760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a401610415565b60cb81905560405181815233906000805160206140fa8339815191529060200160405180910390a2610fa082611a57565b6066546001600160a01b03163314610e815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610415565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611de95760405162461bcd60e51b815260040161041590613a56565b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611e379085908590600401613f33565b600060405180830381600087803b158015611e5157600080fd5b505af1158015611e65573d6000803e3d6000fd5b505050505050565b603354610100900460ff166117545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610415565b6040516bffffffffffffffffffffffff19606087901b16602082015260009081908190611f189060340160405160208183030381529060405286886120c1565b9150915081611f625760405162461bcd60e51b81526020600482015260166024820152751058d8dbdd5b9d08191bd95cc81b9bdd08195e1a5cdd60521b6044820152606401610415565b6000611f6d826120ea565b9050600080611fa28a604051602001611f8891815260200190565b6040516020818303038152906040528885604001516120c1565b9150915081611ff35760405162461bcd60e51b815260206004820152601c60248201527f53746f726167652076616c756520646f6573206e6f74206578697374000000006044820152606401610415565b612004611fff826121ae565b6121c1565b955050505050505b95945050505050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c5826040516020016120499190613f7e565b60405160208183030381529060405280519060200120604051602001612079929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6000805b82156110ea576120ab600184613b7b565b90921691806120b981613fea565b91505061209a565b6000606060006120d0866121f0565b90506120dd818686612222565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290612117836122fd565b905060405180608001604052806121478360008151811061213a5761213a61393a565b6020026020010151612310565b81526020016121628360018151811061213a5761213a61393a565b815260200161218a8360028151811061217d5761217d61393a565b6020026020010151612317565b81526020016121a58360038151811061217d5761217d61393a565b90529392505050565b60606110ea6121bc836123b9565b6123e6565b60008060006020845111156121d75760206121da565b83515b60209485015194036008029390931c9392505050565b6060818051906020012060405160200161220c91815260200190565b6040516020818303038152906040529050919050565b60006060600061223185612468565b90506000806000612243848a89612562565b815192955090935091501580806122575750815b6122a35760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e0000000000006044820152606401610415565b6000816122bf57604051806020016040528060008152506122eb565b6122eb866122ce600188613b7b565b815181106122de576122de61393a565b6020026020010151612986565b919b919a509098505050505050505050565b60606110ea61230b836123b9565b6129b0565b60006110ea825b600060218260000151111561233e5760405162461bcd60e51b81526004016104159061400c565b600080600061234c85612b96565b91945092509050600081600181111561236757612367614043565b146123845760405162461bcd60e51b81526004016104159061400c565b60008386602001516123969190613966565b805190915060208410156107885760208490036101000a90049695505050505050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606060008060006123f685612b96565b91945092509050600081600181111561241157612411614043565b146124595760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21029262810313cba32b9903b30b63ab29760411b6044820152606401610415565b61200c85602001518484612ecc565b60606000612475836122fd565b9050600081516001600160401b0381111561249257612492613573565b6040519080825280602002602001820160405280156124d757816020015b60408051808201909152606080825260208201528152602001906001900390816124b05790505b50905060005b825181101561255a57600061250a8483815181106124fd576124fd61393a565b60200260200101516123e6565b90506040518060400160405280828152602001612526836122fd565b81525083838151811061253b5761253b61393a565b60200260200101819052505080806125529061397e565b9150506124dd565b509392505050565b6000606081808061257287612fa7565b90506000869050600080612599604051806040016040528060608152602001606081525090565b60005b8c5181101561295e578c81815181106125b7576125b761393a565b6020026020010151915082846125cd9190613966565b93506125da600188613966565b9650836126325781518051602090910120851461262d5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b6044820152606401610415565b6126ef565b8151516020116126945781518051602090910120851461262d5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c206861736800000000006044820152606401610415565b846126a283600001516130e1565b146126ef5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f646520686173680000000000006044820152606401610415565b6126fb60106001613966565b82602001515114156127745785518414156127155761295e565b60008685815181106127295761272961393a565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106127545761275461393a565b6020026020010151905061276781613109565b965060019450505061294c565b6002826020015151141561290457600061278d8361313f565b90506000816000815181106127a4576127a461393a565b016020015160f81c905060006127bb600283614059565b6127c690600261407b565b905060006127d7848360ff16613163565b905060006127e58b8a613163565b905060006127f38383613199565b905060ff85166002148061280a575060ff85166003145b156128445780835114801561281f5750808251145b156128315761282e818b613966565b99505b50600160ff1b995061295e945050505050565b60ff85161580612857575060ff85166001145b156128ad57825181146128775750600160ff1b995061295e945050505050565b61289e88602001516001815181106128915761289161393a565b6020026020010151613109565b9a50975061294c945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b6064820152608401610415565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e0000006044820152606401610415565b806129568161397e565b91505061259c565b50600160ff1b8414866129718786613163565b909e909d50909b509950505050505050505050565b602081015180516060916110ea916129a090600190613b7b565b815181106124fd576124fd61393a565b60606000806129be84612b96565b919350909150600190508160018111156129da576129da614043565b14612a215760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b210292628103634b9ba103b30b63ab29760491b6044820152606401610415565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081612a3a5790505090506000835b8651811015612b8b5760208210612ad35760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b6064820152608401610415565b600080612b106040518060400160405280858c60000151612af49190613b7b565b8152602001858c60200151612b099190613966565b9052612b96565b509150915060405180604001604052808383612b2c9190613966565b8152602001848b60200151612b419190613966565b815250858581518110612b5657612b5661393a565b6020908102919091010152612b6c600185613966565b9350612b788183613966565b612b829084613966565b92505050612a67565b508152949350505050565b600080600080846000015111612be95760405162461bcd60e51b81526020600482015260186024820152772926281034ba32b69031b0b73737ba10313290373ab6361760411b6044820152606401610415565b6020840151805160001a607f8111612c0e576000600160009450945094505050612ec5565b60b78111612c86576000612c23608083613b7b565b905080876000015111612c745760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b2102926281039b437b93a1039ba3934b7339760391b6044820152606401610415565b60019550935060009250612ec5915050565b60bf8111612d70576000612c9b60b783613b7b565b905080876000015111612cf05760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e006044820152606401610415565b600183015160208290036101000a9004612d0a8183613966565b885111612d545760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b210292628103637b7339039ba3934b7339760411b6044820152606401610415565b612d5f826001613966565b9650945060009350612ec592505050565b60f78111612de5576000612d8560c083613b7b565b905080876000015111612dd45760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2102926281039b437b93a103634b9ba1760491b6044820152606401610415565b600195509350849250612ec5915050565b6000612df260f783613b7b565b905080876000015111612e475760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e0000006044820152606401610415565b600183015160208290036101000a9004612e618183613966565b885111612ea95760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b6044820152606401610415565b612eb4826001613966565b9650945060019350612ec592505050565b9193909250565b60606000826001600160401b03811115612ee857612ee8613573565b6040519080825280601f01601f191660200182016040528015612f12576020820181803683370190505b509050805160001415612f26579050612fa0565b6000612f328587613966565b90506020820160005b612f4660208761409e565b811015612f7d5782518252612f5c602084613966565b9250612f69602083613966565b915080612f758161397e565b915050612f3b565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6060600082516002612fb991906140b2565b6001600160401b03811115612fd057612fd0613573565b6040519080825280601f01601f191660200182016040528015612ffa576020820181803683370190505b50905060005b83518110156130da57600484828151811061301d5761301d61393a565b01602001516001600160f81b031916901c8261303a8360026140b2565b8151811061304a5761304a61393a565b60200101906001600160f81b031916908160001a90535060108482815181106130755761307561393a565b0160200151613087919060f81c614059565b60f81b826130968360026140b2565b6130a1906001613966565b815181106130b1576130b161393a565b60200101906001600160f81b031916908160001a905350806130d28161397e565b915050613000565b5092915050565b60006020825110156130f557506020015190565b818060200190518101906110ea91906138db565b6000606060208360000151101561312a5761312383613215565b9050613136565b613133836123e6565b90505b612fa0816130e1565b60606110ea61315e83602001516000815181106124fd576124fd61393a565b612fa7565b60608251821061318257506040805160208101909152600081526110ea565b612fa083838486516131949190613b7b565b613220565b6000805b8084511180156131ad5750808351115b80156131fe57508281815181106131c6576131c661393a565b602001015160f81c60f81b6001600160f81b0319168482815181106131ed576131ed61393a565b01602001516001600160f81b031916145b15612fa0578061320d8161397e565b91505061319d565b60606110ea82613334565b60608161322e81601f613966565b101561324c5760405162461bcd60e51b8152600401610415906140d1565b826132578382613966565b10156132755760405162461bcd60e51b8152600401610415906140d1565b61327f8284613966565b845110156132c35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610415565b6060821580156132e25760405191506000825260208201604052610963565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561331b578051835260209283019201613303565b5050858452601f01601f19166040525050949350505050565b60606110ea826020015160008460000151612ecc565b600060c0828403121561335c57600080fd5b50919050565b60008060e0838503121561337557600080fd5b61337f848461334a565b915060c08301356001600160401b0381111561339a57600080fd5b830161018081860312156133ad57600080fd5b809150509250929050565b6001600160a01b038116811461054457600080fd5b6000602082840312156133df57600080fd5b8135612fa0816133b8565b6000602082840312156133fc57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60006080828403121561335c57600080fd5b600080600080610100858703121561344057600080fd5b61344a868661334a565b935060c08501356001600160401b038082111561346657600080fd5b61347288838901613417565b945060e087013591508082111561348857600080fd5b818701915087601f83011261349c57600080fd5b8135818111156134ab57600080fd5b8860208285010111156134bd57600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b8181101561350d5783516001600160a01b0316835292840192918401916001016134e8565b50909695505050505050565b6000806040838503121561352c57600080fd5b8235613537816133b8565b915060208301356133ad816133b8565b60ff8116811461054457600080fd5b60006020828403121561356857600080fd5b8135612fa081613547565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156135ab576135ab613573565b60405290565b60006001600160401b03808411156135cb576135cb613573565b604051601f8501601f19908116603f011681019082821181831017156135f3576135f3613573565b8160405280935085815286868601111561360c57600080fd5b858560208301376000602087830101525050509392505050565b6000806040838503121561363957600080fd5b8235613644816133b8565b915060208301356001600160401b038082111561366057600080fd5b908401906060828703121561367457600080fd5b61367c613589565b82358281111561368b57600080fd5b83019150601f8201871361369e57600080fd5b6136ad878335602085016135b1565b815260208301356020820152604083013560408201528093505050509250929050565b6000602082840312156136e257600080fd5b81356001600160401b038111156136f857600080fd5b8201601f8101841361370957600080fd5b611316848235602084016135b1565b63ffffffff8116811461054457600080fd5b80356001600160401b038116811461374157600080fd5b919050565b6000806040838503121561375957600080fd5b823561376481613718565b91506137726020840161372a565b90509250929050565b60008060e0838503121561378e57600080fd5b613798848461334a565b915060c08301356001600160401b038111156137b357600080fd5b6137bf85828601613417565b9150509250929050565b6000602082840312156137db57600080fd5b8135612fa081613718565b6000602082840312156137f857600080fd5b612fa08261372a565b60006020828403121561381357600080fd5b8151612fa0816133b8565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b8051801515811461374157600080fd5b60006020828403121561388a57600080fd5b612fa082613868565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b6000602082840312156138ed57600080fd5b5051919050565b60006020828403121561390657600080fd5b81516001600160c01b0381168114612fa057600080fd5b60006020828403121561392f57600080fd5b8151612fa081613547565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561397957613979613950565b500190565b600060001982141561399257613992613950565b5060010190565b6000604082840312156139ab57600080fd5b604051604081018181106001600160401b03821117156139cd576139cd613573565b60405282516139db816133b8565b815260208301516bffffffffffffffffffffffff811681146139fc57600080fd5b60208201529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b81811015613af457602081850181015186830182015201613ad8565b81811115613b06576000602083870101525b50601f01601f19169290920160200192915050565b602081526000612fa06020830184613ace565b6000808335601e19843603018112613b4557600080fd5b8301803591506001600160401b03821115613b5f57600080fd5b602001915036819003821315613b7457600080fd5b9250929050565b600082821015613b8d57613b8d613950565b500390565b600060208284031215613ba457600080fd5b8151612fa081613718565b600063ffffffff80831681851681830481118215151615613bd257613bd2613950565b02949350505050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff80841680613c0857613c08613bdb565b92169190910492915050565b6000808335601e19843603018112613c2b57600080fd5b83016020810192503590506001600160401b03811115613c4a57600080fd5b8060051b3603831315613b7457600080fd5b8183526000602080850194508260005b85811015613c97578135613c7f81613718565b63ffffffff1687529582019590820190600101613c6c565b509495945050505050565b6000808335601e19843603018112613cb957600080fd5b83016020810192503590506001600160401b03811115613cd857600080fd5b8060061b3603831315613b7457600080fd5b81835260208301925060008160005b84811015613d2157813586526020808301359087015260409586019590910190600101613cf9565b5093949350505050565b604081833760408201600081526040808301823750600060808301525050565b81835260006020808501808196508560051b810191508460005b87811015613d9b578284038952613d7c8288613c14565b613d87868284613c5c565b9a87019a9550505090840190600101613d65565b5091979650505050505050565b84815260a06020820152600160a0820152600060c082015263ffffffff8416604082015260e060608201526000613ddf8485613c14565b61018060e0850152613df661026085018284613c5c565b915050613e066020860186613ca2565b60df198086850301610100870152613e1f848385613cea565b9350613e2e6040890189613ca2565b93509150610120818786030181880152613e49858585613cea565b94506101409350613e5f84880160608b01613d2b565b60e08901356101c08801526101008901356101e0880152613e82818a018a613c14565b935090508187860301610200880152613e9c858483613c5c565b945050613eab83890189613c14565b935091508086850301610220870152613ec5848484613c5c565b9350613ed5610160890189613c14565b93509150808685030161024087015250613ef0838383613d4b565b935050505061200c608083018463ffffffff169052565b60008060408385031215613f1a57600080fd5b613f2383613868565b9150602083015190509250929050565b60018060a01b0383168152604060208201526000825160606040840152613f5d60a0840182613ace565b90506020840151606084015260408401516080840152809150509392505050565b60c081018235613f8d81613718565b63ffffffff168252613fa16020840161372a565b6001600160401b03808216602085015280613fbe6040870161372a565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b600061ffff8083168181141561400257614002613950565b6001019392505050565b6020808252601a908201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604082015260600190565b634e487b7160e01b600052602160045260246000fd5b600060ff83168061406c5761406c613bdb565b8060ff84160691505092915050565b600060ff821660ff84168082101561409557614095613950565b90039392505050565b6000826140ad576140ad613bdb565b500490565b60008160001904831182151516156140cc576140cc613950565b500290565b6020808252600e908201526d736c6963655f6f766572666c6f7760901b60408201526060019056feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3da264697066735822122097b02a9f6f4337357979a7051c9b6a313f45402b0dee1742a1e9523a7ea7dd7e64736f6c634300080c0033", } // ContractSFFLServiceManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/SFFLTaskManager/binding.go b/contracts/bindings/SFFLTaskManager/binding.go index 3e09c3dd..f9bce30d 100644 --- a/contracts/bindings/SFFLTaskManager/binding.go +++ b/contracts/bindings/SFFLTaskManager/binding.go @@ -117,8 +117,8 @@ type StateRootUpdateMessage struct { // ContractSFFLTaskManagerMetaData contains all meta data concerning the ContractSFFLTaskManager contract. var ContractSFFLTaskManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"taskResponseWindowBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_CHALLENGE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_CREATE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_RESPOND_TO_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_CHALLENGE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_RESPONSE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskResponses\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkQuorum\",\"inputs\":[{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskSuccesfullyChallenged\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createCheckpointTask\",\"inputs\":[{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"generator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_generator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointToTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextCheckpointTaskNum\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"raiseAndResolveCheckpointChallenge\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"pubkeysOfNonSigningOperators\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToCheckpointTask\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedSuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedUnsuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskCreated\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"task\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskResponded\",\"inputs\":[{\"name\":\"taskResponse\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162004e2038038062004e208339810160408190526200003591620002c5565b81806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b591906200030c565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013391906200030c565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b391906200030c565b6001600160a01b031660e052506097805460ff1916600117905563ffffffff811661010052620001e2620001ea565b505062000333565b600054610100900460ff1615620002575760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002aa576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c257600080fd5b50565b60008060408385031215620002d957600080fd5b8251620002e681620002ac565b602084015190925063ffffffff811681146200030157600080fd5b809150509250929050565b6000602082840312156200031f57600080fd5b81516200032c81620002ac565b9392505050565b60805160a05160c05160e05161010051614a69620003b76000396000818161028e0152611e9301526000818161058b01526113dc01526000818161040801526115be01526000818161042f01528181611794015261195601526000818161045601528181610a43015281816110a70152818161123f01526114790152614a696000f3fe608060405234801561001057600080fd5b506004361061022d5760003560e01c80636fe9b41a1161013b578063b98fba4f116100b8578063efcf4edb1161007c578063efcf4edb146105b5578063f2fde38b146105c8578063f63c5bab146105ad578063f8c8765e146105db578063fabc1cbc146105ee57600080fd5b8063b98fba4f14610558578063cf4b17101461056b578063da16491f14610573578063df5cf72314610586578063ef024458146105ad57600080fd5b80638da5cb5b116100ff5780638da5cb5b146104ef57806395eebee614610500578063a168e3c014610523578063a35d2e0514610543578063b98d09081461054b57600080fd5b80636fe9b41a14610499578063715018a6146104ac5780637afa1eed146104b4578063886f1195146104ce5780638cbc379a146104e157600080fd5b8063416c7e5e116101c95780635c975abb1161018d5780635c975abb146103fb5780635df4594614610403578063683048351461042a5780636d14a987146104515780636efb46361461047857600080fd5b8063416c7e5e1461036c5780634f19ade71461037f578063595c6a67146103ad5780635ac86ab7146103b55780635ace2df7146103e857600080fd5b806310d67a2f14610232578063136439dd14610247578063171f1d5b1461025a5780631ad4318914610289578063245a7bfc146102c5578063292f7a4e146102e55780632e44b3491461030f57806332a8ad1e1461031f5780633df4c86614610339575b600080fd5b61024561024036600461378f565b610601565b005b6102456102553660046137ac565b6106bd565b61026d61026836600461392a565b6107ea565b6040805192151583529015156020830152015b60405180910390f35b6102b07f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610280565b60ca546102d8906001600160a01b031681565b604051610280919061397b565b6102f86102f3366004613c8d565b610974565b604080519215158352602083019190915201610280565b60c9546102b09063ffffffff1681565b610327600281565b60405160ff9091168152602001610280565b60c9546103549064010000000090046001600160401b031681565b6040516001600160401b039091168152602001610280565b61024561037a366004613d30565b610a41565b61039f61038d366004613d4d565b60cb6020526000908152604090205481565b604051908152602001610280565b610245610bb6565b6103d86103c3366004613d77565b606654600160ff9092169190911b9081161490565b6040519015158152602001610280565b6102456103f6366004613dbe565b610c70565b60665461039f565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b61048b610486366004613e4f565b610cfa565b604051610280929190613f19565b6103d86104a7366004613f74565b611c07565b610245611c77565b60c9546102d890600160601b90046001600160a01b031681565b6065546102d8906001600160a01b031681565b60c95463ffffffff166102b0565b6033546001600160a01b03166102d8565b6103d861050e366004613d4d565b60cd6020526000908152604090205460ff1681565b61039f610531366004613d4d565b60cc6020526000908152604090205481565b610327600181565b6097546103d89060ff1681565b6103d8610566366004613fe8565b611c8b565b610327600081565b610245610581366004614046565b611cea565b6102d87f000000000000000000000000000000000000000000000000000000000000000081565b6102b0606481565b6102456105c33660046140c7565b612015565b6102456105d636600461378f565b6123c6565b6102456105e936600461413c565b61243c565b6102456105fc3660046137ac565b61259b565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190614198565b6001600160a01b0316336001600160a01b0316146106b15760405162461bcd60e51b81526004016106a8906141b5565b60405180910390fd5b6106ba816126f2565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e906106ed90339060040161397b565b602060405180830381865afa15801561070a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072e91906141ff565b61074a5760405162461bcd60e51b81526004016106a89061421c565b606654818116146107be5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233906000805160206149b4833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061083257610832614264565b60200201518951600160200201518a6020015160006002811061085757610857614264565b60200201518b6020015160016002811061087357610873614264565b602090810291909101518c518d8301516040516108d09a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6108f3919061427a565b905061096661090c61090588846127e9565b8690612880565b610914612914565b61095c61094d85610947604080518082018252600080825260209182015281518083019092526001825260029082015290565b906127e9565b6109568c6129d4565b90612880565b886201d4c0612a64565b909890975095505050505050565b6000806000806109878a8a8a8a8a610cfa565b9150915060005b88811015610a2d578563ffffffff16836020015182815181106109b3576109b3614264565b60200260200101516109c591906142b2565b6001600160601b0316606463ffffffff16846000015183815181106109ec576109ec614264565b60200260200101516109fe91906142b2565b6001600160601b03161015610a1b5750600093509150610a369050565b80610a25816142e1565b91505061098e565b50600193509150505b965096945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614198565b6001600160a01b0316336001600160a01b031614610b6f5760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016106a8565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610be690339060040161397b565b602060405180830381865afa158015610c03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2791906141ff565b610c435760405162461bcd60e51b81526004016106a89061421c565b600019606681905560405190815233906000805160206149b48339815191529060200160405180910390a2565b60665460029060049081161415610c995760405162461bcd60e51b81526004016106a8906142fc565b6000610ca86020860186613d4d565b9050610cb48686612c88565b610cf157604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610cf3565b505b5050505050565b6040805180820190915260608082526020820152600084610d6b5760405162461bcd60e51b81526020600482015260376024820152600080516020614a148339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b60648201526084016106a8565b60408301515185148015610d83575060a08301515185145b8015610d93575060c08301515185145b8015610da3575060e08301515185145b610e0d5760405162461bcd60e51b81526020600482015260416024820152600080516020614a1483398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016106a8565b82515160208401515114610e855760405162461bcd60e51b815260206004820152604460248201819052600080516020614a14833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016106a8565b4363ffffffff168463ffffffff1610610ef45760405162461bcd60e51b815260206004820152603c6024820152600080516020614a1483398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016106a8565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610f3557610f356137c5565b604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b506020820152866001600160401b03811115610f7c57610f7c6137c5565b604051908082528060200260200182016040528015610fa5578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b03811115610fd957610fd96137c5565b604051908082528060200260200182016040528015611002578160200160208202803683370190505b5081526020860151516001600160401b03811115611022576110226137c5565b60405190808252806020026020018201604052801561104b578160200160208202803683370190505b508160200181905250600061111d8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611118919061432f565b612c91565b905060005b8760200151518110156113b8576111678860200151828151811061114857611148614264565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061117d5761117d614264565b6020908102919091010152801561123d57602083015161119e60018361434c565b815181106111ae576111ae614264565b602002602001015160001c836020015182815181106111cf576111cf614264565b602002602001015160001c1161123d576040805162461bcd60e51b8152602060048201526024810191909152600080516020614a1483398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016106a8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061128257611282614264565b60200260200101518b8b6000015185815181106112a1576112a1614264565b60200260200101516040518463ffffffff1660e01b81526004016112de9392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f9190614363565b6001600160c01b03168360000151828151811061133e5761133e614264565b6020026020010181815250506113a4610905611378848660000151858151811061136a5761136a614264565b602002602001015116612d09565b8a60200151848151811061138e5761138e614264565b6020026020010151612d3490919063ffffffff16565b9450806113b0816142e1565b915050611122565b50506113c383612e18565b60975490935060ff166000816113da57600061145c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c919061438c565b905060005b8a811015611ada5782156115bc578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f868181106114b8576114b8614264565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa1580156114f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151c919061438c565b61152691906143a5565b116115bc5760405162461bcd60e51b81526020600482015260666024820152600080516020614a1483398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016106a8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d848181106115fd576115fd614264565b9050013560f81c60f81b60f81c8c8c60a00151858151811061162157611621614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa15801561167d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a191906143bd565b6001600160401b0319166116c48a60400151838151811061114857611148614264565b67ffffffffffffffff1916146117605760405162461bcd60e51b81526020600482015260616024820152600080516020614a1483398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016106a8565b6117908960400151828151811061177957611779614264565b60200260200101518761288090919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d848181106117d3576117d3614264565b9050013560f81c60f81b60f81c8c8c60c0015185815181106117f7576117f7614264565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187791906143e8565b8560200151828151811061188d5761188d614264565b6001600160601b039092166020928302919091018201528501518051829081106118b9576118b9614264565b6020026020010151856000015182815181106118d7576118d7614264565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611ac55761194f8660000151828151811061192157611921614264565b60200260200101518f8f8681811061193b5761193b614264565b600192013560f81c9290921c811614919050565b15611ab3577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f8681811061199557611995614264565b9050013560f81c60f81b60f81c8e896020015185815181106119b9576119b9614264565b60200260200101518f60e0015188815181106119d7576119d7614264565b602002602001015187815181106119f0576119f0614264565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7891906143e8565b8751805185908110611a8c57611a8c614264565b60200260200101818151611aa09190614411565b6001600160601b03169052506001909101905b80611abd816142e1565b9150506118fb565b50508080611ad2906142e1565b915050611461565b505050600080611af48c868a606001518b608001516107ea565b9150915081611b655760405162461bcd60e51b81526020600482015260436024820152600080516020614a1483398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016106a8565b80611bc25760405162461bcd60e51b81526020600482015260396024820152600080516020614a148339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b60648201526084016106a8565b50506000878260200151604051602001611bdd929190614439565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c1284612eb3565b823514611c315760405162461bcd60e51b81526004016106a890614481565b611c3f836040013583612ed1565b611c5b5760405162461bcd60e51b81526004016106a8906144ae565b6000611c6685612f51565b6020840135149150505b9392505050565b611c7f612fd2565b611c89600061302c565b565b6000611c968461307e565b823514611cb55760405162461bcd60e51b81526004016106a890614481565b611cc3836020013583612ed1565b611cdf5760405162461bcd60e51b81526004016106a8906144ae565b6000611c66856130b7565b60ca546001600160a01b03163314611d445760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c657200000060448201526064016106a8565b60665460019060029081161415611d6d5760405162461bcd60e51b81526004016106a8906142fc565b6000611d7c6020860186613d4d565b9050366000611d8e60808801886144d9565b90925090506000611da56080890160608a01613d4d565b905060cb6000611db860208a018a613d4d565b63ffffffff1663ffffffff16815260200190815260200160002054611ddc896130eb565b14611e1b5760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b60448201526064016106a8565b600060cc81611e2d60208b018b613d4d565b63ffffffff1663ffffffff1681526020019081526020016000205414611e8e5760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b60448201526064016106a8565b611eb87f00000000000000000000000000000000000000000000000000000000000000008561451f565b63ffffffff164363ffffffff161115611f0c5760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b60448201526064016106a8565b6000611f17886130fe565b9050600080611f2a8387878a8d89610974565b9150915081611f6c5760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b60448201526064016106a8565b6040805180820190915263ffffffff4316815260208101829052611f9f81611f99368e90038e018e614547565b90613132565b60cc6000611fb060208f018f613d4d565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b82604051611fff9291906145cd565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146120805760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b60648201526084016106a8565b606654600090600190811614156120a95760405162461bcd60e51b81526004016106a8906142fc565b606463ffffffff851611156121125760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016106a8565b856001600160401b0316856001600160401b031610156121835760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b60648201526084016106a8565b42856001600160401b031611156121ef5760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b60648201526084016106a8565b6001600160401b038616158061221b575060c9546001600160401b036401000000009091048116908716115b61228d5760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d7000000000000060648201526084016106a8565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061231381613165565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c33225906123679084906145f7565b60405180910390a260c9546123839063ffffffff16600161451f565b60c980546001600160401b03909816640100000000026bffffffffffffffffffffffff1990981663ffffffff929092169190911796909617909555505050505050565b6123ce612fd2565b6001600160a01b0381166124335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6106ba8161302c565b600054610100900460ff161580801561245c5750600054600160ff909116105b806124765750303b158015612476575060005460ff166001145b6124d95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a8565b6000805460ff1916600117905580156124fc576000805461ff0019166101001790555b612507856000613178565b6125108461302c565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610cf3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126129190614198565b6001600160a01b0316336001600160a01b0316146126425760405162461bcd60e51b81526004016106a8906141b5565b6066541981196066541916146126bb5760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016106a8565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107df565b6001600160a01b0381166127805760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106a8565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526128056136a0565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156128385761283a565bfe5b50806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016106a8565b505092915050565b604080518082019091526000808252602082015261289c6136be565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156128385750806128785760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016106a8565b61291c6136dc565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612a046000805160206149d48339815191528661427a565b90505b612a1081613250565b90935091506000805160206149d4833981519152828309831415612a4a576040805180820190915290815260208101919091529392505050565b6000805160206149d4833981519152600182089050612a07565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612a96613701565b60005b6002811015612c5b576000612aaf826006614695565b9050848260028110612ac357612ac3614264565b60200201515183612ad58360006143a5565b600c8110612ae557612ae5614264565b6020020152848260028110612afc57612afc614264565b60200201516020015183826001612b1391906143a5565b600c8110612b2357612b23614264565b6020020152838260028110612b3a57612b3a614264565b6020020151515183612b4d8360026143a5565b600c8110612b5d57612b5d614264565b6020020152838260028110612b7457612b74614264565b6020020151516001602002015183612b8d8360036143a5565b600c8110612b9d57612b9d614264565b6020020152838260028110612bb457612bb4614264565b602002015160200151600060028110612bcf57612bcf614264565b602002015183612be08360046143a5565b600c8110612bf057612bf0614264565b6020020152838260028110612c0757612c07614264565b602002015160200151600160028110612c2257612c22614264565b602002015183612c338360056143a5565b600c8110612c4357612c43614264565b60200201525080612c53816142e1565b915050612a99565b50612c64613720565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b60005b92915050565b600080612c9d846132d2565b9050808360ff166001901b11611c705760405162461bcd60e51b815260206004820152603f60248201526000805160206149f483398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016106a8565b6000805b8215612c8b57612d1e60018461434c565b9092169180612d2c816146b4565b915050612d0d565b60408051808201909152600080825260208201526102008261ffff1610612d905760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016106a8565b8161ffff1660011415612da4575081612c8b565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612e0d57600161ffff871660ff83161c81161415612df057612ded8484612880565b93505b612dfa8384612880565b92506201fffe600192831b169101612dc0565b509195945050505050565b60408051808201909152600080825260208201528151158015612e3d57506020820151155b15612e5b575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206149d48339815191528460200151612e8e919061427a565b612ea6906000805160206149d483398151915261434c565b905292915050565b919050565b6000612ec260208301836146d6565b6001600160401b031692915050565b6000610100612ee360608401846146f1565b905011158015612ef95750610100826080013511155b612f3f5760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b60448201526064016106a8565b612f488261343b565b90921492915050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f82604051602001612f85919061473a565b60405160208183030381529060405280519060200120604051602001612fb5929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6033546001600160a01b03163314611c895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000604061308f6020840184613d4d565b63ffffffff16901b6130a760408401602085016146d6565b6001600160401b03161792915050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c582604051602001612f859190614818565b600081604051602001612fb591906148ab565b60007f5f7351501d0bdb4d74dd1448340c3ecab5ad96dfe2a69df6d6e199bd0dcc523982604051602001612f859190614966565b60008282604051602001613147929190614974565b60405160208183030381529060405280519060200120905092915050565b600081604051602001612fb591906145f7565b6065546001600160a01b031615801561319957506001600160a01b03821615155b61321b5760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106a8565b606681905560405181815233906000805160206149b48339815191529060200160405180910390a261324c826126f2565b5050565b600080806000805160206149d483398151915260036000805160206149d4833981519152866000805160206149d48339815191528889090908905060006132c6827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f526000805160206149d4833981519152613538565b91959194509092505050565b6000610100825111156133495760405162461bcd60e51b8152602060048201526044602482018190526000805160206149f4833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016106a8565b815161335757506000919050565b6000808360008151811061336d5761336d614264565b0160200151600160f89190911c81901b92505b84518110156134325784818151811061339b5761339b614264565b0160200151600160f89190911c1b915082821161341e5760405162461bcd60e51b815260206004820152604760248201526000805160206149f483398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016106a8565b9181179161342b816142e1565b9050613380565b50909392505050565b60006134456136a0565b60408051843560208201526000910160405160208183030381529060405280519060200120905060006134798383876135e0565b9050600061348d608087013561010061434c565b83901c90506000805b876080013581101561352c57600060408901356001831b166134e6576134bf60608a018a6146f1565b846134c9816142e1565b95508181106134da576134da614264565b905060200201356134e9565b60005b90506001821b8416613509576135028760018784613685565b9450613519565b6135168760018388613685565b94505b5080613524816142e1565b915050613496565b50919695505050505050565b600080613543613720565b61354b61373e565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156128385750826135d55760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016106a8565b505195945050505050565b6000602082013561366c5760a08201356135fc57506000611c70565b828260a0013514156136505760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c617465640060448201526064016106a8565b6136658460008460a001358560c00135613685565b9050611c70565b61367d846000858560200135613685565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806136ef61375c565b81526020016136fc61375c565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146106ba57600080fd5b6000602082840312156137a157600080fd5b8135611c708161377a565b6000602082840312156137be57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156137fd576137fd6137c5565b60405290565b60405161010081016001600160401b03811182821017156137fd576137fd6137c5565b604051601f8201601f191681016001600160401b038111828210171561384e5761384e6137c5565b604052919050565b60006040828403121561386857600080fd5b6138706137db565b9050813581526020820135602082015292915050565b600082601f83011261389757600080fd5b604051604081018181106001600160401b03821117156138b9576138b96137c5565b80604052508060408401858111156138d057600080fd5b845b81811015612e0d5780358352602092830192016138d2565b6000608082840312156138fc57600080fd5b6139046137db565b90506139108383613886565b815261391f8360408401613886565b602082015292915050565b600080600080610120858703121561394157600080fd5b843593506139528660208701613856565b925061396186606087016138ea565b91506139708660e08701613856565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f8401126139a157600080fd5b5081356001600160401b038111156139b857600080fd5b6020830191508360208285010111156139d057600080fd5b9250929050565b803563ffffffff81168114612eae57600080fd5b60006001600160401b03821115613a0457613a046137c5565b5060051b60200190565b600082601f830112613a1f57600080fd5b81356020613a34613a2f836139eb565b613826565b82815260059290921b84018101918181019086841115613a5357600080fd5b8286015b84811015613a7557613a68816139d7565b8352918301918301613a57565b509695505050505050565b600082601f830112613a9157600080fd5b81356020613aa1613a2f836139eb565b82815260069290921b84018101918181019086841115613ac057600080fd5b8286015b84811015613a7557613ad68882613856565b835291830191604001613ac4565b600082601f830112613af557600080fd5b81356020613b05613a2f836139eb565b82815260059290921b84018101918181019086841115613b2457600080fd5b8286015b84811015613a755780356001600160401b03811115613b475760008081fd5b613b558986838b0101613a0e565b845250918301918301613b28565b60006101808284031215613b7657600080fd5b613b7e613803565b905081356001600160401b0380821115613b9757600080fd5b613ba385838601613a0e565b83526020840135915080821115613bb957600080fd5b613bc585838601613a80565b60208401526040840135915080821115613bde57600080fd5b613bea85838601613a80565b6040840152613bfc85606086016138ea565b6060840152613c0e8560e08601613856565b6080840152610120840135915080821115613c2857600080fd5b613c3485838601613a0e565b60a0840152610140840135915080821115613c4e57600080fd5b613c5a85838601613a0e565b60c0840152610160840135915080821115613c7457600080fd5b50613c8184828501613ae4565b60e08301525092915050565b60008060008060008060a08789031215613ca657600080fd5b8635955060208701356001600160401b0380821115613cc457600080fd5b613cd08a838b0161398f565b9097509550859150613ce460408a016139d7565b94506060890135915080821115613cfa57600080fd5b50613d0789828a01613b63565b925050613d16608088016139d7565b90509295509295509295565b80151581146106ba57600080fd5b600060208284031215613d4257600080fd5b8135611c7081613d22565b600060208284031215613d5f57600080fd5b611c70826139d7565b60ff811681146106ba57600080fd5b600060208284031215613d8957600080fd5b8135611c7081613d68565b600060a08284031215613da657600080fd5b50919050565b600060608284031215613da657600080fd5b60008060008084860360e0811215613dd557600080fd5b85356001600160401b0380821115613dec57600080fd5b613df889838a01613d94565b9650613e078960208a01613dac565b95506040607f1984011215613e1b57600080fd5b60808801945060c0880135925080831115613e3557600080fd5b5050613e4387828801613a80565b91505092959194509250565b600080600080600060808688031215613e6757600080fd5b8535945060208601356001600160401b0380821115613e8557600080fd5b613e9189838a0161398f565b9096509450849150613ea5604089016139d7565b93506060880135915080821115613ebb57600080fd5b50613ec888828901613b63565b9150509295509295909350565b600081518084526020808501945080840160005b83811015613f0e5781516001600160601b031687529582019590820190600101613ee9565b509495945050505050565b6040815260008351604080840152613f346080840182613ed5565b90506020850151603f19848303016060850152613f518282613ed5565b925050508260208301529392505050565b600060e08284031215613da657600080fd5b600080600060a08486031215613f8957600080fd5b83356001600160401b0380821115613fa057600080fd5b613fac87838801613dac565b9450613fbb8760208801613dac565b93506080860135915080821115613fd157600080fd5b50613fde86828701613f62565b9150509250925092565b6000806000838503610140811215613fff57600080fd5b60c081121561400d57600080fd5b5083925061401e8560c08601613dac565b91506101208401356001600160401b0381111561403a57600080fd5b613fde86828701613f62565b600080600060a0848603121561405b57600080fd5b83356001600160401b038082111561407257600080fd5b61407e87838801613d94565b945061408d8760208801613dac565b935060808601359150808211156140a357600080fd5b50613fde86828701613b63565b80356001600160401b0381168114612eae57600080fd5b6000806000806000608086880312156140df57600080fd5b6140e8866140b0565b94506140f6602087016140b0565b9350614104604087016139d7565b925060608601356001600160401b0381111561411f57600080fd5b61412b8882890161398f565b969995985093965092949392505050565b6000806000806080858703121561415257600080fd5b843561415d8161377a565b9350602085013561416d8161377a565b9250604085013561417d8161377a565b9150606085013561418d8161377a565b939692955090935050565b6000602082840312156141aa57600080fd5b8151611c708161377a565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561421157600080fd5b8151611c7081613d22565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261429757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818516818304811182151516156142d8576142d861429c565b02949350505050565b60006000198214156142f5576142f561429c565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b60006020828403121561434157600080fd5b8151611c7081613d68565b60008282101561435e5761435e61429c565b500390565b60006020828403121561437557600080fd5b81516001600160c01b0381168114611c7057600080fd5b60006020828403121561439e57600080fd5b5051919050565b600082198211156143b8576143b861429c565b500190565b6000602082840312156143cf57600080fd5b815167ffffffffffffffff1981168114611c7057600080fd5b6000602082840312156143fa57600080fd5b81516001600160601b0381168114611c7057600080fd5b60006001600160601b03838116908316818110156144315761443161429c565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561447457815185529382019390820190600101614458565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e198436030181126144f057600080fd5b8301803591506001600160401b0382111561450a57600080fd5b6020019150368190038213156139d057600080fd5b600063ffffffff80831681851680830382111561453e5761453e61429c565b01949350505050565b60006060828403121561455957600080fd5b604051606081018181106001600160401b038211171561457b5761457b6137c5565b604052614587836139d7565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff6145b5826139d7565b16825260208181013590830152604090810135910152565b60a081016145db82856145a7565b825163ffffffff16606083015260208301516080830152611c70565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b8181101561466c5782810184015186820160e001528301614650565b8181111561467e57600060e083880101525b50601f01601f19169390930160e001949350505050565b60008160001904831182151516156146af576146af61429c565b500290565b600061ffff808316818114156146cc576146cc61429c565b6001019392505050565b6000602082840312156146e857600080fd5b611c70826140b0565b6000808335601e1984360301811261470857600080fd5b8301803591506001600160401b0382111561472257600080fd5b6020019150600581901b36038213156139d057600080fd5b60006020808352608083016001600160401b0380614757876140b0565b16838601526147678387016140b0565b604082821681880152808801359150601e1988360301821261478857600080fd5b9087019081358381111561479b57600080fd5b6060935083810236038913156147b057600080fd5b87840184905293849052908401926000919060a08801835b8281101561480a57863582528787013588830152838701356001600160801b0381168082146147f5578687fd5b838601525095850195908501906001016147c8565b509998505050505050505050565b60c0810163ffffffff61482a846139d7565b168252614839602084016140b0565b6001600160401b03808216602085015280614856604087016140b0565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff806148c0856139d7565b1660208401526148d2602085016140b0565b6001600160401b038082166040860152806148ef604088016140b0565b16606086015282614902606088016139d7565b16608086015260808601359250601e1986360301831261492157600080fd5b91850191823591508082111561493657600080fd5b5080360385131561494657600080fd5b60a08085015261495d60c085018260208501614882565b95945050505050565b60608101612c8b82846145a7565b825163ffffffff168152602080840151908201526040808401519082015260a08101611c706060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212200ef0cc123a4a507d22d566dd8085f300baeea3c956db63c47e3f8313ce9951ba64736f6c634300080c0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"taskResponseWindowBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"PAUSED_CHALLENGE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_CREATE_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSED_RESPOND_TO_CHECKPOINT_TASK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_CHALLENGE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TASK_RESPONSE_WINDOW_BLOCK\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"THRESHOLD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"aggregator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allCheckpointTaskResponses\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkQuorum\",\"inputs\":[{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointTaskSuccesfullyChallenged\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createCheckpointTask\",\"inputs\":[{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"generator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_generator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointToTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nextCheckpointTaskNum\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"raiseAndResolveCheckpointChallenge\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"respondToCheckpointTask\",\"inputs\":[{\"name\":\"task\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"nonSignerStakesAndSignature\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAggregator\",\"inputs\":[{\"name\":\"_aggregator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGenerator\",\"inputs\":[{\"name\":\"_generator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structOperatorSetUpdate.Message\",\"components\":[{\"name\":\"id\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"operators\",\"type\":\"tuple[]\",\"internalType\":\"structRollupOperators.Operator[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weight\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"verifyMessageInclusionState\",\"inputs\":[{\"name\":\"message\",\"type\":\"tuple\",\"internalType\":\"structStateRootUpdate.Message\",\"components\":[{\"name\":\"rollupId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blockHeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"nearDaTransactionId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nearDaCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponse\",\"type\":\"tuple\",\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structSparseMerkleTree.Proof\",\"components\":[{\"name\":\"key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"value\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"bitMask\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"numSideNodes\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonMembershipLeafPath\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"nonMembershipLeafValue\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedSuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskChallengedUnsuccessfully\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"challenger\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskCreated\",\"inputs\":[{\"name\":\"taskIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"task\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.Task\",\"components\":[{\"name\":\"taskCreatedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"fromTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"toTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"quorumThreshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointTaskResponded\",\"inputs\":[{\"name\":\"taskResponse\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponse\",\"components\":[{\"name\":\"referenceTaskIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"stateRootUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetUpdatesRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"taskResponseMetadata\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCheckpoint.TaskResponseMetadata\",\"components\":[{\"name\":\"taskRespondedBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"hashOfNonSigners\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162004ead38038062004ead8339810160408190526200003591620002c5565b81806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b591906200030c565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013391906200030c565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b391906200030c565b6001600160a01b031660e052506097805460ff1916600117905563ffffffff811661010052620001e2620001ea565b505062000333565b600054610100900460ff1615620002575760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002aa576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002c257600080fd5b50565b60008060408385031215620002d957600080fd5b8251620002e681620002ac565b602084015190925063ffffffff811681146200030157600080fd5b809150509250929050565b6000602082840312156200031f57600080fd5b81516200032c81620002ac565b9392505050565b60805160a05160c05160e05161010051614af6620003b7600039600081816102a90152611ef60152600081816105ab015261143f015260008181610436015261162101526000818161045d015281816117f701526119b901526000818161048401528181610a760152818161110a015281816112a201526114dc0152614af66000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80636fe9b41a1161013b578063cf4b1710116100b8578063f2fde38b1161007c578063f2fde38b146105e8578063f63c5bab146105cd578063f8c8765e146105fb578063f9120af61461060e578063fabc1cbc1461062157600080fd5b8063cf4b17101461058b578063da16491f14610593578063df5cf723146105a6578063ef024458146105cd578063efcf4edb146105d557600080fd5b806395eebee6116100ff57806395eebee614610520578063a168e3c014610543578063a35d2e0514610563578063b98d09081461056b578063b98fba4f1461057857600080fd5b80636fe9b41a146104c7578063715018a6146104da5780637afa1eed146104e2578063886f1195146104fc5780638da5cb5b1461050f57600080fd5b80634a7c7e4b116101c95780635c975abb1161018d5780635c975abb146104295780635df459461461043157806368304835146104585780636d14a9871461047f5780636efb4636146104a657600080fd5b80634a7c7e4b1461039a5780634f19ade7146103ad578063595c6a67146103db5780635ac86ab7146103e35780635ace2df71461041657600080fd5b8063292f7a4e11610210578063292f7a4e146103005780632e44b3491461032a57806332a8ad1e1461033a5780633df4c86614610354578063416c7e5e1461038757600080fd5b806310d67a2f1461024d578063136439dd14610262578063171f1d5b146102755780631ad43189146102a4578063245a7bfc146102e0575b600080fd5b61026061025b36600461381c565b610634565b005b610260610270366004613839565b6106f0565b6102886102833660046139b7565b61081d565b6040805192151583529015156020830152015b60405180910390f35b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161029b565b60ca546102f3906001600160a01b031681565b60405161029b9190613a08565b61031361030e366004613d1a565b6109a7565b60408051921515835260208301919091520161029b565b60c9546102cb9063ffffffff1681565b610342600281565b60405160ff909116815260200161029b565b60c95461036f9064010000000090046001600160401b031681565b6040516001600160401b03909116815260200161029b565b610260610395366004613dbd565b610a74565b6102606103a836600461381c565b610be9565b6103cd6103bb366004613dda565b60cb6020526000908152604090205481565b60405190815260200161029b565b610260610c19565b6104066103f1366004613e04565b606654600160ff9092169190911b9081161490565b604051901515815260200161029b565b610260610424366004613e4b565b610cd3565b6066546103cd565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6104b96104b4366004613edc565b610d5d565b60405161029b929190613fa6565b6104066104d5366004614001565b611c6a565b610260611cda565b60c9546102f390600160601b90046001600160a01b031681565b6065546102f3906001600160a01b031681565b6033546001600160a01b03166102f3565b61040661052e366004613dda565b60cd6020526000908152604090205460ff1681565b6103cd610551366004613dda565b60cc6020526000908152604090205481565b610342600181565b6097546104069060ff1681565b610406610586366004614075565b611cee565b610342600081565b6102606105a13660046140d3565b611d4d565b6102f37f000000000000000000000000000000000000000000000000000000000000000081565b6102cb606481565b6102606105e3366004614154565b612078565b6102606105f636600461381c565b612429565b6102606106093660046141c9565b61249f565b61026061061c36600461381c565b6125fe565b61026061062f366004613839565b612628565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab9190614225565b6001600160a01b0316336001600160a01b0316146106e45760405162461bcd60e51b81526004016106db90614242565b60405180910390fd5b6106ed8161277f565b50565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610720903390600401613a08565b602060405180830381865afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610761919061428c565b61077d5760405162461bcd60e51b81526004016106db906142a9565b606654818116146107f15760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d707420604482015277746f20756e70617573652066756e6374696f6e616c69747960401b60648201526084016106db565b60668190556040518181523390600080516020614a41833981519152906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187876000015188602001518860000151600060028110610865576108656142f1565b60200201518951600160200201518a6020015160006002811061088a5761088a6142f1565b60200201518b602001516001600281106108a6576108a66142f1565b602090810291909101518c518d8301516040516109039a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c6109269190614307565b905061099961093f6109388884612876565b869061290d565b6109476129a1565b61098f6109808561097a604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612876565b6109898c612a61565b9061290d565b886201d4c0612af1565b909890975095505050505050565b6000806000806109ba8a8a8a8a8a610d5d565b9150915060005b88811015610a60578563ffffffff16836020015182815181106109e6576109e66142f1565b60200260200101516109f8919061433f565b6001600160601b0316606463ffffffff1684600001518381518110610a1f57610a1f6142f1565b6020026020010151610a31919061433f565b6001600160601b03161015610a4e5750600093509150610a699050565b80610a588161436e565b9150506109c1565b50600193509150505b965096945050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190614225565b6001600160a01b0316336001600160a01b031614610ba25760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a4016106db565b6097805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b610bf1612d15565b60c980546001600160a01b03909216600160601b026001600160601b03909216919091179055565b60655460405163237dfb4760e11b81526001600160a01b03909116906346fbf68e90610c49903390600401613a08565b602060405180830381865afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a919061428c565b610ca65760405162461bcd60e51b81526004016106db906142a9565b60001960668190556040519081523390600080516020614a418339815191529060200160405180910390a2565b60665460029060049081161415610cfc5760405162461bcd60e51b81526004016106db90614389565b6000610d0b6020860186613dda565b9050610d178686612d6f565b610d5457604051339063ffffffff8316907f0c6923c4a98292e75c5d677a1634527f87b6d19cf2c7d396aece99790c44a79590600090a350610d56565b505b5050505050565b6040805180820190915260608082526020820152600084610dce5760405162461bcd60e51b81526020600482015260376024820152600080516020614aa18339815191526044820152761c995cce88195b5c1d1e481c5d5bdc9d5b481a5b9c1d5d604a1b60648201526084016106db565b60408301515185148015610de6575060a08301515185145b8015610df6575060c08301515185145b8015610e06575060e08301515185145b610e705760405162461bcd60e51b81526020600482015260416024820152600080516020614aa183398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a4016106db565b82515160208401515114610ee85760405162461bcd60e51b815260206004820152604460248201819052600080516020614aa1833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a4016106db565b4363ffffffff168463ffffffff1610610f575760405162461bcd60e51b815260206004820152603c6024820152600080516020614aa183398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b0000000060648201526084016106db565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b03811115610f9857610f98613852565b604051908082528060200260200182016040528015610fc1578160200160208202803683370190505b506020820152866001600160401b03811115610fdf57610fdf613852565b604051908082528060200260200182016040528015611008578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b0381111561103c5761103c613852565b604051908082528060200260200182016040528015611065578160200160208202803683370190505b5081526020860151516001600160401b0381111561108557611085613852565b6040519080825280602002602001820160405280156110ae578160200160208202803683370190505b50816020018190525060006111808a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117b91906143bc565b612d78565b905060005b87602001515181101561141b576111ca886020015182815181106111ab576111ab6142f1565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106111e0576111e06142f1565b602090810291909101015280156112a05760208301516112016001836143d9565b81518110611211576112116142f1565b602002602001015160001c83602001518281518110611232576112326142f1565b602002602001015160001c116112a0576040805162461bcd60e51b8152602060048201526024810191909152600080516020614aa183398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f7274656460648201526084016106db565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106112e5576112e56142f1565b60200260200101518b8b600001518581518110611304576113046142f1565b60200260200101516040518463ffffffff1660e01b81526004016113419392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa15801561135e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138291906143f0565b6001600160c01b0316836000015182815181106113a1576113a16142f1565b6020026020010181815250506114076109386113db84866000015185815181106113cd576113cd6142f1565b602002602001015116612df0565b8a6020015184815181106113f1576113f16142f1565b6020026020010151612e1b90919063ffffffff16565b9450806114138161436e565b915050611185565b505061142683612eff565b60975490935060ff1660008161143d5760006114bf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf9190614419565b905060005b8a811015611b3d57821561161f578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061151b5761151b6142f1565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa15801561155b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157f9190614419565b6115899190614432565b1161161f5760405162461bcd60e51b81526020600482015260666024820152600080516020614aa183398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c4016106db565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d84818110611660576116606142f1565b9050013560f81c60f81b60f81c8c8c60a001518581518110611684576116846142f1565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061444a565b6001600160401b0319166117278a6040015183815181106111ab576111ab6142f1565b67ffffffffffffffff1916146117c35760405162461bcd60e51b81526020600482015260616024820152600080516020614aa183398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c4016106db565b6117f3896040015182815181106117dc576117dc6142f1565b60200260200101518761290d90919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611836576118366142f1565b9050013560f81c60f81b60f81c8c8c60c00151858151811061185a5761185a6142f1565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190614475565b856020015182815181106118f0576118f06142f1565b6001600160601b0390921660209283029190910182015285015180518290811061191c5761191c6142f1565b60200260200101518560000151828151811061193a5761193a6142f1565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611b28576119b286600001518281518110611984576119846142f1565b60200260200101518f8f8681811061199e5761199e6142f1565b600192013560f81c9290921c811614919050565b15611b16577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f868181106119f8576119f86142f1565b9050013560f81c60f81b60f81c8e89602001518581518110611a1c57611a1c6142f1565b60200260200101518f60e001518881518110611a3a57611a3a6142f1565b60200260200101518781518110611a5357611a536142f1565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190614475565b8751805185908110611aef57611aef6142f1565b60200260200101818151611b03919061449e565b6001600160601b03169052506001909101905b80611b208161436e565b91505061195e565b50508080611b359061436e565b9150506114c4565b505050600080611b578c868a606001518b6080015161081d565b9150915081611bc85760405162461bcd60e51b81526020600482015260436024820152600080516020614aa183398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a4016106db565b80611c255760405162461bcd60e51b81526020600482015260396024820152600080516020614aa18339815191526044820152781c995cce881cda59db985d1d5c99481a5cc81a5b9d985b1a59603a1b60648201526084016106db565b50506000878260200151604051602001611c409291906144c6565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b6000611c7584612f9a565b823514611c945760405162461bcd60e51b81526004016106db9061450e565b611ca2836040013583612fb8565b611cbe5760405162461bcd60e51b81526004016106db9061453b565b6000611cc985613038565b6020840135149150505b9392505050565b611ce2612d15565b611cec60006130b9565b565b6000611cf98461310b565b823514611d185760405162461bcd60e51b81526004016106db9061450e565b611d26836020013583612fb8565b611d425760405162461bcd60e51b81526004016106db9061453b565b6000611cc985613144565b60ca546001600160a01b03163314611da75760405162461bcd60e51b815260206004820152601d60248201527f41676772656761746f72206d757374206265207468652063616c6c657200000060448201526064016106db565b60665460019060029081161415611dd05760405162461bcd60e51b81526004016106db90614389565b6000611ddf6020860186613dda565b9050366000611df16080880188614566565b90925090506000611e086080890160608a01613dda565b905060cb6000611e1b60208a018a613dda565b63ffffffff1663ffffffff16815260200190815260200160002054611e3f89613178565b14611e7e5760405162461bcd60e51b815260206004820152600f60248201526e0aee4dedcce40e8c2e6d640d0c2e6d608b1b60448201526064016106db565b600060cc81611e9060208b018b613dda565b63ffffffff1663ffffffff1681526020019081526020016000205414611ef15760405162461bcd60e51b815260206004820152601660248201527515185cdac8185b1c9958591e481c995cdc1bdb99195960521b60448201526064016106db565b611f1b7f0000000000000000000000000000000000000000000000000000000000000000856145ac565b63ffffffff164363ffffffff161115611f6f5760405162461bcd60e51b815260206004820152601660248201527514995cdc1bdb9cd9481d1a5b5948195e18d95959195960521b60448201526064016106db565b6000611f7a8861318b565b9050600080611f8d8387878a8d896109a7565b9150915081611fcf5760405162461bcd60e51b815260206004820152600e60248201526d145d5bdc9d5b481b9bdd081b595d60921b60448201526064016106db565b6040805180820190915263ffffffff431681526020810182905261200281611ffc368e90038e018e6145d4565b906131bf565b60cc600061201360208f018f613dda565b63ffffffff1663ffffffff168152602001908152602001600020819055507f8016fcc5ad5dcf12fff2e128d239d9c6eb61f4041126bbac2c93fa8962627c1b8b8260405161206292919061465a565b60405180910390a1505050505050505050505050565b60c954600160601b90046001600160a01b031633146120e35760405162461bcd60e51b815260206004820152602160248201527f5461736b2067656e657261746f72206d757374206265207468652063616c6c656044820152603960f91b60648201526084016106db565b6066546000906001908116141561210c5760405162461bcd60e51b81526004016106db90614389565b606463ffffffff851611156121755760405162461bcd60e51b815260206004820152602960248201527f51756f72756d207468726573686f6c642067726561746572207468616e2064656044820152683737b6b4b730ba37b960b91b60648201526084016106db565b856001600160401b0316856001600160401b031610156121e65760405162461bcd60e51b815260206004820152602660248201527f66726f6d54696d657374616d702067726561746572207468616e20746f54696d6044820152650657374616d760d41b60648201526084016106db565b42856001600160401b031611156122525760405162461bcd60e51b815260206004820152602a60248201527f746f54696d657374616d702067726561746572207468616e2063757272656e7460448201526902074696d657374616d760b41b60648201526084016106db565b6001600160401b038616158061227e575060c9546001600160401b036401000000009091048116908716115b6122f05760405162461bcd60e51b815260206004820152603a60248201527f66726f6d54696d657374616d70206e6f742067726561746572207468616e206c60448201527f61737420636865636b706f696e7420746f54696d657374616d7000000000000060648201526084016106db565b60006040518060a001604052804363ffffffff168152602001886001600160401b03168152602001876001600160401b031681526020018663ffffffff16815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050612376816131f2565b60c9805463ffffffff908116600090815260cb60205260409081902093909355905491519116907f78aec7310ea6fd468e3d3bbd16a806fd4987515634d5b5bf4cf4f036d9c33225906123ca908490614684565b60405180910390a260c9546123e69063ffffffff1660016145ac565b60c980546001600160401b03909816640100000000026bffffffffffffffffffffffff1990981663ffffffff929092169190911796909617909555505050505050565b612431612d15565b6001600160a01b0381166124965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106db565b6106ed816130b9565b600054610100900460ff16158080156124bf5750600054600160ff909116105b806124d95750303b1580156124d9575060005460ff166001145b61253c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b6000805460ff19166001179055801561255f576000805461ff0019166101001790555b61256a856000613205565b612573846130b9565b60ca80546001600160a01b0319166001600160a01b038581169190911790915560c980546001600160601b0316600160601b928516929092029190911790558015610d56576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b612606612d15565b60ca80546001600160a01b0319166001600160a01b0392909216919091179055565b606560009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561267b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269f9190614225565b6001600160a01b0316336001600160a01b0316146126cf5760405162461bcd60e51b81526004016106db90614242565b6066541981196066541916146127485760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d706044820152777420746f2070617573652066756e6374696f6e616c69747960401b60648201526084016106db565b606681905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610812565b6001600160a01b03811661280d5760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a4016106db565b606554604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082019091526000808252602082015261289261372d565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080156128c5576128c7565bfe5b50806129055760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b60448201526064016106db565b505092915050565b604080518082019091526000808252602082015261292961374b565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156128c55750806129055760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b60448201526064016106db565b6129a9613769565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612a91600080516020614a6183398151915286614307565b90505b612a9d816132dd565b9093509150600080516020614a61833981519152828309831415612ad7576040805180820190915290815260208101919091529392505050565b600080516020614a61833981519152600182089050612a94565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612b2361378e565b60005b6002811015612ce8576000612b3c826006614722565b9050848260028110612b5057612b506142f1565b60200201515183612b62836000614432565b600c8110612b7257612b726142f1565b6020020152848260028110612b8957612b896142f1565b60200201516020015183826001612ba09190614432565b600c8110612bb057612bb06142f1565b6020020152838260028110612bc757612bc76142f1565b6020020151515183612bda836002614432565b600c8110612bea57612bea6142f1565b6020020152838260028110612c0157612c016142f1565b6020020151516001602002015183612c1a836003614432565b600c8110612c2a57612c2a6142f1565b6020020152838260028110612c4157612c416142f1565b602002015160200151600060028110612c5c57612c5c6142f1565b602002015183612c6d836004614432565b600c8110612c7d57612c7d6142f1565b6020020152838260028110612c9457612c946142f1565b602002015160200151600160028110612caf57612caf6142f1565b602002015183612cc0836005614432565b600c8110612cd057612cd06142f1565b60200201525080612ce08161436e565b915050612b26565b50612cf16137ad565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6033546001600160a01b03163314611cec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b60005b92915050565b600080612d848461335f565b9050808360ff166001901b11611cd35760405162461bcd60e51b815260206004820152603f6024820152600080516020614a8183398151915260448201527f69746d61703a206269746d61702065786365656473206d61782076616c75650060648201526084016106db565b6000805b8215612d7257612e056001846143d9565b9092169180612e1381614741565b915050612df4565b60408051808201909152600080825260208201526102008261ffff1610612e775760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b60448201526064016106db565b8161ffff1660011415612e8b575081612d72565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff1610612ef457600161ffff871660ff83161c81161415612ed757612ed4848461290d565b93505b612ee1838461290d565b92506201fffe600192831b169101612ea7565b509195945050505050565b60408051808201909152600080825260208201528151158015612f2457506020820151155b15612f42575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020614a618339815191528460200151612f759190614307565b612f8d90600080516020614a618339815191526143d9565b905292915050565b919050565b6000612fa96020830183614763565b6001600160401b031692915050565b6000610100612fca606084018461477e565b905011158015612fe05750610100826080013511155b6130265760405162461bcd60e51b81526020600482015260176024820152760a6d2c8ca40dcdec8cae640caf0c6cacac840c8cae0e8d604b1b60448201526064016106db565b61302f826134c8565b90921492915050565b60007f6c53db212565b8956d5fc704eb18d9f2372ce861f785ef64103f74e6c2154b3f8260405160200161306c91906147c7565b6040516020818303038152906040528051906020012060405160200161309c929190918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000604061311c6020840184613dda565b63ffffffff16901b6131346040840160208501614763565b6001600160401b03161792915050565b60007f482a38e491413194a63664d1808926c0e075bf3aeee17b4a07878c670a8936c58260405160200161306c91906148a5565b60008160405160200161309c9190614938565b60007f5f7351501d0bdb4d74dd1448340c3ecab5ad96dfe2a69df6d6e199bd0dcc52398260405160200161306c91906149f3565b600082826040516020016131d4929190614a01565b60405160208183030381529060405280519060200120905092915050565b60008160405160200161309c9190614684565b6065546001600160a01b031615801561322657506001600160a01b03821615155b6132a85760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a4016106db565b60668190556040518181523390600080516020614a418339815191529060200160405180910390a26132d98261277f565b5050565b60008080600080516020614a618339815191526003600080516020614a6183398151915286600080516020614a61833981519152888909090890506000613353827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020614a618339815191526135c5565b91959194509092505050565b6000610100825111156133d65760405162461bcd60e51b815260206004820152604460248201819052600080516020614a81833981519152908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a4016106db565b81516133e457506000919050565b600080836000815181106133fa576133fa6142f1565b0160200151600160f89190911c81901b92505b84518110156134bf57848181518110613428576134286142f1565b0160200151600160f89190911c1b91508282116134ab5760405162461bcd60e51b81526020600482015260476024820152600080516020614a8183398151915260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a4016106db565b918117916134b88161436e565b905061340d565b50909392505050565b60006134d261372d565b604080518435602082015260009101604051602081830303815290604052805190602001209050600061350683838761366d565b9050600061351a60808701356101006143d9565b83901c90506000805b87608001358110156135b957600060408901356001831b166135735761354c60608a018a61477e565b846135568161436e565b9550818110613567576135676142f1565b90506020020135613576565b60005b90506001821b84166135965761358f8760018784613712565b94506135a6565b6135a38760018388613712565b94505b50806135b18161436e565b915050613523565b50919695505050505050565b6000806135d06137ad565b6135d86137cb565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280156128c55750826136625760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c75726500000000000060448201526064016106db565b505195945050505050565b600060208201356136f95760a082013561368957506000611cd3565b828260a0013514156136dd5760405162461bcd60e51b815260206004820152601f60248201527f6e6f6e4d656d626572736869704c656166206e6f7420756e72656c617465640060448201526064016106db565b6136f28460008460a001358560c00135613712565b9050611cd3565b61370a846000858560200135613712565b949350505050565b60008385535060018401919091526021830152506041902090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806040016040528061377c6137e9565b81526020016137896137e9565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146106ed57600080fd5b60006020828403121561382e57600080fd5b8135611cd381613807565b60006020828403121561384b57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561388a5761388a613852565b60405290565b60405161010081016001600160401b038111828210171561388a5761388a613852565b604051601f8201601f191681016001600160401b03811182821017156138db576138db613852565b604052919050565b6000604082840312156138f557600080fd5b6138fd613868565b9050813581526020820135602082015292915050565b600082601f83011261392457600080fd5b604051604081018181106001600160401b038211171561394657613946613852565b806040525080604084018581111561395d57600080fd5b845b81811015612ef457803583526020928301920161395f565b60006080828403121561398957600080fd5b613991613868565b905061399d8383613913565b81526139ac8360408401613913565b602082015292915050565b60008060008061012085870312156139ce57600080fd5b843593506139df86602087016138e3565b92506139ee8660608701613977565b91506139fd8660e087016138e3565b905092959194509250565b6001600160a01b0391909116815260200190565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b602083019150836020828501011115613a5d57600080fd5b9250929050565b803563ffffffff81168114612f9557600080fd5b60006001600160401b03821115613a9157613a91613852565b5060051b60200190565b600082601f830112613aac57600080fd5b81356020613ac1613abc83613a78565b6138b3565b82815260059290921b84018101918181019086841115613ae057600080fd5b8286015b84811015613b0257613af581613a64565b8352918301918301613ae4565b509695505050505050565b600082601f830112613b1e57600080fd5b81356020613b2e613abc83613a78565b82815260069290921b84018101918181019086841115613b4d57600080fd5b8286015b84811015613b0257613b6388826138e3565b835291830191604001613b51565b600082601f830112613b8257600080fd5b81356020613b92613abc83613a78565b82815260059290921b84018101918181019086841115613bb157600080fd5b8286015b84811015613b025780356001600160401b03811115613bd45760008081fd5b613be28986838b0101613a9b565b845250918301918301613bb5565b60006101808284031215613c0357600080fd5b613c0b613890565b905081356001600160401b0380821115613c2457600080fd5b613c3085838601613a9b565b83526020840135915080821115613c4657600080fd5b613c5285838601613b0d565b60208401526040840135915080821115613c6b57600080fd5b613c7785838601613b0d565b6040840152613c898560608601613977565b6060840152613c9b8560e086016138e3565b6080840152610120840135915080821115613cb557600080fd5b613cc185838601613a9b565b60a0840152610140840135915080821115613cdb57600080fd5b613ce785838601613a9b565b60c0840152610160840135915080821115613d0157600080fd5b50613d0e84828501613b71565b60e08301525092915050565b60008060008060008060a08789031215613d3357600080fd5b8635955060208701356001600160401b0380821115613d5157600080fd5b613d5d8a838b01613a1c565b9097509550859150613d7160408a01613a64565b94506060890135915080821115613d8757600080fd5b50613d9489828a01613bf0565b925050613da360808801613a64565b90509295509295509295565b80151581146106ed57600080fd5b600060208284031215613dcf57600080fd5b8135611cd381613daf565b600060208284031215613dec57600080fd5b611cd382613a64565b60ff811681146106ed57600080fd5b600060208284031215613e1657600080fd5b8135611cd381613df5565b600060a08284031215613e3357600080fd5b50919050565b600060608284031215613e3357600080fd5b60008060008084860360e0811215613e6257600080fd5b85356001600160401b0380821115613e7957600080fd5b613e8589838a01613e21565b9650613e948960208a01613e39565b95506040607f1984011215613ea857600080fd5b60808801945060c0880135925080831115613ec257600080fd5b5050613ed087828801613b0d565b91505092959194509250565b600080600080600060808688031215613ef457600080fd5b8535945060208601356001600160401b0380821115613f1257600080fd5b613f1e89838a01613a1c565b9096509450849150613f3260408901613a64565b93506060880135915080821115613f4857600080fd5b50613f5588828901613bf0565b9150509295509295909350565b600081518084526020808501945080840160005b83811015613f9b5781516001600160601b031687529582019590820190600101613f76565b509495945050505050565b6040815260008351604080840152613fc16080840182613f62565b90506020850151603f19848303016060850152613fde8282613f62565b925050508260208301529392505050565b600060e08284031215613e3357600080fd5b600080600060a0848603121561401657600080fd5b83356001600160401b038082111561402d57600080fd5b61403987838801613e39565b94506140488760208801613e39565b9350608086013591508082111561405e57600080fd5b5061406b86828701613fef565b9150509250925092565b600080600083850361014081121561408c57600080fd5b60c081121561409a57600080fd5b508392506140ab8560c08601613e39565b91506101208401356001600160401b038111156140c757600080fd5b61406b86828701613fef565b600080600060a084860312156140e857600080fd5b83356001600160401b03808211156140ff57600080fd5b61410b87838801613e21565b945061411a8760208801613e39565b9350608086013591508082111561413057600080fd5b5061406b86828701613bf0565b80356001600160401b0381168114612f9557600080fd5b60008060008060006080868803121561416c57600080fd5b6141758661413d565b94506141836020870161413d565b935061419160408701613a64565b925060608601356001600160401b038111156141ac57600080fd5b6141b888828901613a1c565b969995985093965092949392505050565b600080600080608085870312156141df57600080fd5b84356141ea81613807565b935060208501356141fa81613807565b9250604085013561420a81613807565b9150606085013561421a81613807565b939692955090935050565b60006020828403121561423757600080fd5b8151611cd381613807565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b60006020828403121561429e57600080fd5b8151611cd381613daf565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261432457634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038083168185168183048111821515161561436557614365614329565b02949350505050565b600060001982141561438257614382614329565b5060010190565b60208082526019908201527814185d5cd8589b194e881a5b99195e081a5cc81c185d5cd959603a1b604082015260600190565b6000602082840312156143ce57600080fd5b8151611cd381613df5565b6000828210156143eb576143eb614329565b500390565b60006020828403121561440257600080fd5b81516001600160c01b0381168114611cd357600080fd5b60006020828403121561442b57600080fd5b5051919050565b6000821982111561444557614445614329565b500190565b60006020828403121561445c57600080fd5b815167ffffffffffffffff1981168114611cd357600080fd5b60006020828403121561448757600080fd5b81516001600160601b0381168114611cd357600080fd5b60006001600160601b03838116908316818110156144be576144be614329565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b83811015614501578151855293820193908201906001016144e5565b5092979650505050505050565b6020808252601390820152720aee4dedcce40dacae6e6c2ceca40d2dcc8caf606b1b604082015260600190565b60208082526011908201527024b73b30b634b21029a6aa10383937b7b360791b604082015260600190565b6000808335601e1984360301811261457d57600080fd5b8301803591506001600160401b0382111561459757600080fd5b602001915036819003821315613a5d57600080fd5b600063ffffffff8083168185168083038211156145cb576145cb614329565b01949350505050565b6000606082840312156145e657600080fd5b604051606081018181106001600160401b038211171561460857614608613852565b60405261461483613a64565b815260208301356020820152604083013560408201528091505092915050565b63ffffffff61464282613a64565b16825260208181013590830152604090810135910152565b60a081016146688285614634565b825163ffffffff16606083015260208301516080830152611cd3565b6000602080835263ffffffff8085511682850152818501516001600160401b038082166040870152806040880151166060870152505080606086015116608085015250608084015160a08085015280518060c086015260005b818110156146f95782810184015186820160e0015283016146dd565b8181111561470b57600060e083880101525b50601f01601f19169390930160e001949350505050565b600081600019048311821515161561473c5761473c614329565b500290565b600061ffff8083168181141561475957614759614329565b6001019392505050565b60006020828403121561477557600080fd5b611cd38261413d565b6000808335601e1984360301811261479557600080fd5b8301803591506001600160401b038211156147af57600080fd5b6020019150600581901b3603821315613a5d57600080fd5b60006020808352608083016001600160401b03806147e48761413d565b16838601526147f483870161413d565b604082821681880152808801359150601e1988360301821261481557600080fd5b9087019081358381111561482857600080fd5b60609350838102360389131561483d57600080fd5b87840184905293849052908401926000919060a08801835b8281101561489757863582528787013588830152838701356001600160801b038116808214614882578687fd5b83860152509585019590850190600101614855565b509998505050505050505050565b60c0810163ffffffff6148b784613a64565b1682526148c66020840161413d565b6001600160401b038082166020850152806148e36040870161413d565b1660408501525050606083013560608301526080830135608083015260a083013560a083015292915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600063ffffffff8061494d85613a64565b16602084015261495f6020850161413d565b6001600160401b0380821660408601528061497c6040880161413d565b1660608601528261498f60608801613a64565b16608086015260808601359250601e198636030183126149ae57600080fd5b9185019182359150808211156149c357600080fd5b508036038513156149d357600080fd5b60a0808501526149ea60c08501826020850161490f565b95945050505050565b60608101612d728284614634565b825163ffffffff168152602080840151908201526040808401519082015260a08101611cd36060830184805163ffffffff16825260209081015191015256feab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd474269746d61705574696c732e6f72646572656442797465734172726179546f42424c535369676e6174757265436865636b65722e636865636b5369676e617475a2646970667358221220400e501cd5a35aba12942402fd0103db484a517c6e3faf0f29de575b0a98d38664736f6c634300080c0033", } // ContractSFFLTaskManagerABI is the input ABI used to generate the binding from. @@ -662,37 +662,6 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) CheckSigna return _ContractSFFLTaskManager.Contract.CheckSignatures(&_ContractSFFLTaskManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, params) } -// CheckpointTaskNumber is a free data retrieval call binding the contract method 0x8cbc379a. -// -// Solidity: function checkpointTaskNumber() view returns(uint32) -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCaller) CheckpointTaskNumber(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _ContractSFFLTaskManager.contract.Call(opts, &out, "checkpointTaskNumber") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// CheckpointTaskNumber is a free data retrieval call binding the contract method 0x8cbc379a. -// -// Solidity: function checkpointTaskNumber() view returns(uint32) -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) CheckpointTaskNumber() (uint32, error) { - return _ContractSFFLTaskManager.Contract.CheckpointTaskNumber(&_ContractSFFLTaskManager.CallOpts) -} - -// CheckpointTaskNumber is a free data retrieval call binding the contract method 0x8cbc379a. -// -// Solidity: function checkpointTaskNumber() view returns(uint32) -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerCallerSession) CheckpointTaskNumber() (uint32, error) { - return _ContractSFFLTaskManager.Contract.CheckpointTaskNumber(&_ContractSFFLTaskManager.CallOpts) -} - // CheckpointTaskSuccesfullyChallenged is a free data retrieval call binding the contract method 0x95eebee6. // // Solidity: function checkpointTaskSuccesfullyChallenged(uint32 ) view returns(bool) @@ -1258,23 +1227,23 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) PauseA // RaiseAndResolveCheckpointChallenge is a paid mutator transaction binding the contract method 0x5ace2df7. // -// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) taskResponseMetadata, (uint256,uint256)[] pubkeysOfNonSigningOperators) returns() -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactor) RaiseAndResolveCheckpointChallenge(opts *bind.TransactOpts, task CheckpointTask, taskResponse CheckpointTaskResponse, taskResponseMetadata CheckpointTaskResponseMetadata, pubkeysOfNonSigningOperators []BN254G1Point) (*types.Transaction, error) { - return _ContractSFFLTaskManager.contract.Transact(opts, "raiseAndResolveCheckpointChallenge", task, taskResponse, taskResponseMetadata, pubkeysOfNonSigningOperators) +// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) , (uint256,uint256)[] ) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactor) RaiseAndResolveCheckpointChallenge(opts *bind.TransactOpts, task CheckpointTask, taskResponse CheckpointTaskResponse, arg2 CheckpointTaskResponseMetadata, arg3 []BN254G1Point) (*types.Transaction, error) { + return _ContractSFFLTaskManager.contract.Transact(opts, "raiseAndResolveCheckpointChallenge", task, taskResponse, arg2, arg3) } // RaiseAndResolveCheckpointChallenge is a paid mutator transaction binding the contract method 0x5ace2df7. // -// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) taskResponseMetadata, (uint256,uint256)[] pubkeysOfNonSigningOperators) returns() -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) RaiseAndResolveCheckpointChallenge(task CheckpointTask, taskResponse CheckpointTaskResponse, taskResponseMetadata CheckpointTaskResponseMetadata, pubkeysOfNonSigningOperators []BN254G1Point) (*types.Transaction, error) { - return _ContractSFFLTaskManager.Contract.RaiseAndResolveCheckpointChallenge(&_ContractSFFLTaskManager.TransactOpts, task, taskResponse, taskResponseMetadata, pubkeysOfNonSigningOperators) +// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) , (uint256,uint256)[] ) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) RaiseAndResolveCheckpointChallenge(task CheckpointTask, taskResponse CheckpointTaskResponse, arg2 CheckpointTaskResponseMetadata, arg3 []BN254G1Point) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.RaiseAndResolveCheckpointChallenge(&_ContractSFFLTaskManager.TransactOpts, task, taskResponse, arg2, arg3) } // RaiseAndResolveCheckpointChallenge is a paid mutator transaction binding the contract method 0x5ace2df7. // -// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) taskResponseMetadata, (uint256,uint256)[] pubkeysOfNonSigningOperators) returns() -func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) RaiseAndResolveCheckpointChallenge(task CheckpointTask, taskResponse CheckpointTaskResponse, taskResponseMetadata CheckpointTaskResponseMetadata, pubkeysOfNonSigningOperators []BN254G1Point) (*types.Transaction, error) { - return _ContractSFFLTaskManager.Contract.RaiseAndResolveCheckpointChallenge(&_ContractSFFLTaskManager.TransactOpts, task, taskResponse, taskResponseMetadata, pubkeysOfNonSigningOperators) +// Solidity: function raiseAndResolveCheckpointChallenge((uint32,uint64,uint64,uint32,bytes) task, (uint32,bytes32,bytes32) taskResponse, (uint32,bytes32) , (uint256,uint256)[] ) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) RaiseAndResolveCheckpointChallenge(task CheckpointTask, taskResponse CheckpointTaskResponse, arg2 CheckpointTaskResponseMetadata, arg3 []BN254G1Point) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.RaiseAndResolveCheckpointChallenge(&_ContractSFFLTaskManager.TransactOpts, task, taskResponse, arg2, arg3) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1319,6 +1288,48 @@ func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) Respon return _ContractSFFLTaskManager.Contract.RespondToCheckpointTask(&_ContractSFFLTaskManager.TransactOpts, task, taskResponse, nonSignerStakesAndSignature) } +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactor) SetAggregator(opts *bind.TransactOpts, _aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.contract.Transact(opts, "setAggregator", _aggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) SetAggregator(_aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.SetAggregator(&_ContractSFFLTaskManager.TransactOpts, _aggregator) +} + +// SetAggregator is a paid mutator transaction binding the contract method 0xf9120af6. +// +// Solidity: function setAggregator(address _aggregator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) SetAggregator(_aggregator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.SetAggregator(&_ContractSFFLTaskManager.TransactOpts, _aggregator) +} + +// SetGenerator is a paid mutator transaction binding the contract method 0x4a7c7e4b. +// +// Solidity: function setGenerator(address _generator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactor) SetGenerator(opts *bind.TransactOpts, _generator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.contract.Transact(opts, "setGenerator", _generator) +} + +// SetGenerator is a paid mutator transaction binding the contract method 0x4a7c7e4b. +// +// Solidity: function setGenerator(address _generator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerSession) SetGenerator(_generator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.SetGenerator(&_ContractSFFLTaskManager.TransactOpts, _generator) +} + +// SetGenerator is a paid mutator transaction binding the contract method 0x4a7c7e4b. +// +// Solidity: function setGenerator(address _generator) returns() +func (_ContractSFFLTaskManager *ContractSFFLTaskManagerTransactorSession) SetGenerator(_generator common.Address) (*types.Transaction, error) { + return _ContractSFFLTaskManager.Contract.SetGenerator(&_ContractSFFLTaskManager.TransactOpts, _generator) +} + // SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f. // // Solidity: function setPauserRegistry(address newPauserRegistry) returns() diff --git a/contracts/evm/src/eth/SFFLTaskManager.sol b/contracts/evm/src/eth/SFFLTaskManager.sol index 74f48661..8693256e 100644 --- a/contracts/evm/src/eth/SFFLTaskManager.sol +++ b/contracts/evm/src/eth/SFFLTaskManager.sol @@ -220,27 +220,17 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign emit CheckpointTaskResponded(taskResponse, taskResponseMetadata); } - /** - * @notice Gets the next checkpoint task number - * @return Next checkpoint task number - */ - function checkpointTaskNumber() external view returns (uint32) { - return nextCheckpointTaskNum; - } - /** * @notice Challenges a task * @dev Does not fail if the challenge is not succesful * @param task Resolved task to be challenged * @param taskResponse Task response to be challenged - * @param taskResponseMetadata Current task response metadata - * @param pubkeysOfNonSigningOperators Non-signing operators BLS pubkeys */ function raiseAndResolveCheckpointChallenge( Checkpoint.Task calldata task, Checkpoint.TaskResponse calldata taskResponse, - Checkpoint.TaskResponseMetadata calldata taskResponseMetadata,// forgefmt: disable-line - BN254.G1Point[] memory pubkeysOfNonSigningOperators// forgefmt: disable-line + Checkpoint.TaskResponseMetadata calldata, /* taskResponseMetadata */ + BN254.G1Point[] memory /* pubkeysOfNonSigningOperators */ ) external onlyWhenNotPaused(PAUSED_CHALLENGE_CHECKPOINT_TASK) { uint32 referenceTaskIndex = taskResponse.referenceTaskIndex; @@ -270,8 +260,6 @@ contract SFFLTaskManager is Initializable, OwnableUpgradeable, Pausable, BLSSign // keccak256(abi.encodePacked(task.taskCreatedBlock, hashesOfPubkeysOfNonSigningOperators)); // require(signatoryRecordHash == taskResponseMetadata.hashOfNonSigners, "Wrong non-signer pubkeys"); - // // TODO: slashing logic when it's available - // checkpointTaskSuccesfullyChallenged[referenceTaskIndex] = true; // emit CheckpointTaskChallengedSuccessfully(referenceTaskIndex, msg.sender); diff --git a/contracts/evm/test/SFFLOperatorSetUpdateRegistry.t.sol b/contracts/evm/test/SFFLOperatorSetUpdateRegistry.t.sol new file mode 100644 index 00000000..cb80cfa5 --- /dev/null +++ b/contracts/evm/test/SFFLOperatorSetUpdateRegistry.t.sol @@ -0,0 +1,224 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.12; + +import {Test, console2} from "forge-std/Test.sol"; + +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {BLSMockAVSDeployer} from "eigenlayer-middleware/test/utils/BLSMockAVSDeployer.sol"; +import {BN254} from "eigenlayer-middleware/src/libraries/BN254.sol"; +import {ServiceManagerBase} from "eigenlayer-middleware/src/ServiceManagerBase.sol"; +import {IRegistryCoordinator} from "eigenlayer-middleware/src/interfaces/IRegistryCoordinator.sol"; +import {IBLSSignatureChecker} from "eigenlayer-middleware/src/interfaces/IBLSSignatureChecker.sol"; +import {IAVSDirectory} from "@eigenlayer/contracts/interfaces/IAVSDirectory.sol"; +import {IStakeRegistry} from "eigenlayer-middleware/src/interfaces/IStakeRegistry.sol"; +import {IPauserRegistry} from "@eigenlayer/contracts/interfaces/IPauserRegistry.sol"; +import {ISignatureUtils} from "@eigenlayer/contracts/interfaces/ISignatureUtils.sol"; + +import {SFFLTaskManager} from "../src/eth/SFFLTaskManager.sol"; +import {SFFLOperatorSetUpdateRegistry} from "../src/eth/SFFLOperatorSetUpdateRegistry.sol"; +import {SFFLServiceManager} from "../src/eth/SFFLServiceManager.sol"; +import {SFFLRegistryCoordinator} from "../src/eth/SFFLRegistryCoordinator.sol"; +import {RollupOperators} from "../src/base/utils/RollupOperators.sol"; + +import {TestUtils} from "./utils/TestUtils.sol"; + +contract SFFLServiceManagerHarness is SFFLServiceManager, Test { + bool public autoWhitelist; + + constructor( + IAVSDirectory _avsDirectory, + IRegistryCoordinator _registryCoordinator, + IStakeRegistry _stakeRegistry, + SFFLTaskManager _taskManager, + SFFLOperatorSetUpdateRegistry _operatorSetUpdateRegistry + ) + SFFLServiceManager(_avsDirectory, _registryCoordinator, _stakeRegistry, _taskManager, _operatorSetUpdateRegistry) + {} + + function forceInitialize(address initialOwner, IPauserRegistry _pauserRegistry) public { + _transferOwnership(initialOwner); + _initializePauser(_pauserRegistry, UNPAUSE_ALL); + } + + function registerOperatorToAVS( + address operator, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) public override onlyRegistryCoordinator { + if (autoWhitelist) { + vm.prank(_registryCoordinator.owner()); + operatorSetUpdateRegistry.setOperatorWhitelisting(operator, true); + } + + SFFLServiceManager.registerOperatorToAVS(operator, operatorSignature); + } + + function setAutoWhitelist(bool _autoWhitelist) public { + autoWhitelist = _autoWhitelist; + } +} + +contract SFFLOperatorSetUpdateRegistryTest is TestUtils { + using BN254 for BN254.G1Point; + + event OperatorSetUpdatedAtBlock(uint64 indexed id, uint64 indexed timestamp); + event OperatorWhitelistingUpdated(address indexed operator, bool isWhitelisted); + + SFFLOperatorSetUpdateRegistry public operatorSetUpdateRegistry; + SFFLServiceManagerHarness public sfflServiceManager; + + uint32 public constant TASK_RESPONSE_WINDOW_BLOCK = 30; + address public aggregator; + address public generator; + + address public serviceManagerOwner = address(uint160(uint256(keccak256("serviceManagerOwner")))); + + function setUp() public { + _setUpBLSMockAVSDeployer(); + + aggregator = addr("aggregator"); + generator = addr("generator"); + + address impl = address(new SFFLTaskManager(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK)); + + SFFLTaskManager taskManager = SFFLTaskManager( + deployProxy( + impl, + address(proxyAdmin), + abi.encodeWithSelector( + SFFLTaskManager.initialize.selector, pauserRegistry, registryCoordinatorOwner, aggregator, generator + ) + ) + ); + + vm.label(impl, "taskManagerImpl"); + vm.label(address(taskManager), "taskManagerProxy"); + + operatorSetUpdateRegistry = new SFFLOperatorSetUpdateRegistry(registryCoordinator); + + address sfflServiceManagerImplementation = address( + new SFFLServiceManagerHarness( + IAVSDirectory(avsDirectoryMock), + registryCoordinator, + stakeRegistry, + taskManager, + operatorSetUpdateRegistry + ) + ); + + vm.prank(proxyAdminOwner); + proxyAdmin.upgradeAndCall( + TransparentUpgradeableProxy(payable(address(serviceManager))), + sfflServiceManagerImplementation, + abi.encodeWithSignature("forceInitialize(address,address)", serviceManagerOwner, address(pauserRegistry)) + ); + + sfflServiceManager = SFFLServiceManagerHarness(address(serviceManager)); + + address registryCoordinatorImpl = address( + new SFFLRegistryCoordinator( + serviceManager, stakeRegistry, blsApkRegistry, indexRegistry, operatorSetUpdateRegistry + ) + ); + + vm.prank(proxyAdminOwner); + proxyAdmin.upgrade(TransparentUpgradeableProxy(payable(address(registryCoordinator))), registryCoordinatorImpl); + } + + function test_constructor() public { + assertEq(address(operatorSetUpdateRegistry.registryCoordinator()), address(registryCoordinator)); + } + + function test_getOperatorSetUpdateCount() public { + assertEq(operatorSetUpdateRegistry.getOperatorSetUpdateCount(), 0); + + vm.prank(address(registryCoordinator)); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + + assertEq(operatorSetUpdateRegistry.getOperatorSetUpdateCount(), 1); + } + + function test_recordOperatorSetUpdate() public { + vm.prank(address(registryCoordinator)); + vm.expectEmit(true, true, false, true); + emit OperatorSetUpdatedAtBlock(0, uint64(block.timestamp)); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + + assertEq(operatorSetUpdateRegistry.operatorSetUpdateIdToBlockNumber(0), uint32(block.number)); + } + + function test_recordOperatorSetUpdate_multipleInSameBlock() public { + vm.prank(address(registryCoordinator)); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + + vm.prank(address(registryCoordinator)); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + + assertEq(operatorSetUpdateRegistry.getOperatorSetUpdateCount(), 1); + } + + function test_recordOperatorSetUpdate_RevertWhen_NotRegistryCoordinator() public { + vm.expectRevert("SFFLOperatorSetUpdateRegistry.onlyRegistryCoordinator: caller is not the registry coordinator"); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + } + + function test_getOperatorSetUpdate() public { + sfflServiceManager.setAutoWhitelist(true); + setUpOperators(keccak256("test"), 999, 1000, 100, 1); + + assertEq(operatorSetUpdateRegistry.getOperatorSetUpdateCount(), maxOperatorsToRegister); + + vm.roll(block.number + 1); + + vm.prank(address(registryCoordinator)); + operatorSetUpdateRegistry.recordOperatorSetUpdate(); + + assertEq(operatorSetUpdateRegistry.getOperatorSetUpdateCount(), maxOperatorsToRegister + 1); + + (RollupOperators.Operator[] memory previousOperatorSet, RollupOperators.Operator[] memory newOperatorSet) = + operatorSetUpdateRegistry.getOperatorSetUpdate(1); + + assertEq(previousOperatorSet.length, 1); + assertEq(newOperatorSet.length, 2); + assertNotEq(keccak256(abi.encode(previousOperatorSet)), keccak256(abi.encode(newOperatorSet))); + + (previousOperatorSet, newOperatorSet) = + operatorSetUpdateRegistry.getOperatorSetUpdate(uint64(maxOperatorsToRegister)); + + assertEq(previousOperatorSet.length, maxOperatorsToRegister); + assertEq(newOperatorSet.length, maxOperatorsToRegister); + assertEq(keccak256(abi.encode(previousOperatorSet)), keccak256(abi.encode(newOperatorSet))); + + (previousOperatorSet, newOperatorSet) = operatorSetUpdateRegistry.getOperatorSetUpdate(0); + + assertEq(previousOperatorSet.length, 0); + assertEq(newOperatorSet.length, 1); + } + + function test_setOperatorWhitelisting() public { + address operator = address(0x123); + + vm.prank(registryCoordinatorOwner); + vm.expectEmit(true, false, false, true); + emit OperatorWhitelistingUpdated(operator, true); + operatorSetUpdateRegistry.setOperatorWhitelisting(operator, true); + + assertTrue(operatorSetUpdateRegistry.isOperatorWhitelisted(operator)); + + vm.prank(registryCoordinatorOwner); + vm.expectEmit(true, false, false, true); + emit OperatorWhitelistingUpdated(operator, false); + operatorSetUpdateRegistry.setOperatorWhitelisting(operator, false); + + assertFalse(operatorSetUpdateRegistry.isOperatorWhitelisted(operator)); + } + + function test_setOperatorWhitelisting_RevertWhen_NotCoordinatorOwner() public { + address operator = address(0x123); + + vm.expectRevert( + "SFFLOperatorSetUpdateRegistry.onlyCoordinatorOwner: caller is not the owner of the registryCoordinator" + ); + operatorSetUpdateRegistry.setOperatorWhitelisting(operator, true); + } +} diff --git a/contracts/evm/test/SFFLRegistryRollup.t.sol b/contracts/evm/test/SFFLRegistryRollup.t.sol index a4455ceb..b13b3c7e 100644 --- a/contracts/evm/test/SFFLRegistryRollup.t.sol +++ b/contracts/evm/test/SFFLRegistryRollup.t.sol @@ -462,6 +462,185 @@ contract SFFLRegistryRollupTest is TestUtils { registry.forceOperatorSetUpdate(message); } + function test_updateOperatorSet_RevertWhen_OperatorIsUpToDate() public { + RollupOperators.Operator[] memory operators = new RollupOperators.Operator[](1); + operators[0] = RollupOperators.Operator(initialOperators[0].pubkey, DEFAULT_WEIGHT); + + OperatorSetUpdate.Message memory message = + OperatorSetUpdate.Message(registry.nextOperatorUpdateId(), 0, operators); + + BN254.G1Point[] memory nonSignerPubkeys = new BN254.G1Point[](1); + nonSignerPubkeys[0] = initialOperators[3].pubkey; + + RollupOperators.SignatureInfo memory signatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: nonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.hashToG1(message.hash()).scalar_mul( + 6305737925830641523797682626723526790077499630761662964405387941160208990354 + ) + }); + + vm.expectRevert("Operator is up to date"); + registry.updateOperatorSet(message, signatureInfo); + } + + function test_verifyCalldata_RevertWhen_OperatorSetNotInitialized() public { + SFFLRegistryRollup newRegistry = SFFLRegistryRollup( + deployProxy( + address(new SFFLRegistryRollup()), + addr("proxyAdmin"), + abi.encodeWithSelector( + registry.initialize.selector, QUORUM_THRESHOLD, addr("owner"), addr("aggregator"), pauserRegistry + ) + ) + ); + + StateRootUpdate.Message memory message = + StateRootUpdate.Message(0, 1, 0, keccak256(hex""), keccak256(hex""), keccak256(hex"f00d")); + + BN254.G1Point[] memory nonSignerPubkeys = new BN254.G1Point[](0); + + RollupOperators.SignatureInfo memory signatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: nonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.hashToG1(message.hash()).scalar_mul( + 6305737925830641523797682626723526790077499630761662964405387941160208990354 + ) + }); + + vm.expectRevert("Operator set was not initialized"); + newRegistry.updateStateRoot(message, signatureInfo); + } + + function test_verifyCalldata_RevertWhen_PubkeysNotSorted() public { + StateRootUpdate.Message memory message = + StateRootUpdate.Message(0, 1, 0, keccak256(hex""), keccak256(hex""), keccak256(hex"f00d")); + + BN254.G1Point[] memory nonSignerPubkeys = new BN254.G1Point[](2); + nonSignerPubkeys[0] = initialOperators[2].pubkey; + nonSignerPubkeys[1] = initialOperators[3].pubkey; + + RollupOperators.SignatureInfo memory signatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: nonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.hashToG1(message.hash()).scalar_mul( + 6305737925830641523797682626723526790077499630761662964405387941160208990354 + ) + }); + + vm.expectRevert("Pubkeys not sorted"); + registry.updateStateRoot(message, signatureInfo); + } + + function test_verifyCalldata_RevertWhen_OperatorHasZeroWeight() public { + RollupOperators.Operator[] memory operators = new RollupOperators.Operator[](1); + operators[0] = RollupOperators.Operator(initialOperators[3].pubkey, 0); + + OperatorSetUpdate.Message memory updateMessage = + OperatorSetUpdate.Message(registry.nextOperatorUpdateId(), 0, operators); + + BN254.G1Point[] memory updateNonSignerPubkeys = new BN254.G1Point[](1); + updateNonSignerPubkeys[0] = initialOperators[3].pubkey; + + RollupOperators.SignatureInfo memory updateSignatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: updateNonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.hashToG1(updateMessage.hash()).scalar_mul( + 6305737925830641523797682626723526790077499630761662964405387941160208990354 + ) + }); + + registry.updateOperatorSet(updateMessage, updateSignatureInfo); + + StateRootUpdate.Message memory message = + StateRootUpdate.Message(0, 1, 0, keccak256(hex""), keccak256(hex""), keccak256(hex"f00d")); + + BN254.G1Point[] memory nonSignerPubkeys = new BN254.G1Point[](1); + nonSignerPubkeys[0] = initialOperators[3].pubkey; + + RollupOperators.SignatureInfo memory signatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: nonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.hashToG1(message.hash()).scalar_mul( + 6305737925830641523797682626723526790077499630761662964405387941160208990354 + ) + }); + + vm.expectRevert("Operator has zero weight"); + registry.updateStateRoot(message, signatureInfo); + } + + function test_verifyCalldata_RevertWhen_SignatureIsInvalid() public { + StateRootUpdate.Message memory message = + StateRootUpdate.Message(0, 1, 0, keccak256(hex""), keccak256(hex""), keccak256(hex"f00d")); + + BN254.G1Point[] memory nonSignerPubkeys = new BN254.G1Point[](1); + nonSignerPubkeys[0] = initialOperators[3].pubkey; + + RollupOperators.SignatureInfo memory signatureInfo = RollupOperators.SignatureInfo({ + nonSignerPubkeys: nonSignerPubkeys, + apkG2: BN254.G2Point( + [ + 21774854595736935906777183372431491423672246101465086449723107940773462536091, + 11859388993407979358677113204795514610964422675159446451278647734574620707784 + ], + [ + 3453374196609277266042659107600871924832557088868662992636101033001416801985, + 2630500117064331827715800222355515273572786883080373379723474133051328147838 + ] + ), + sigma: BN254.G1Point(1, 2) // Invalid signature + }); + + vm.expectRevert("Signature is invalid"); + registry.updateStateRoot(message, signatureInfo); + } + function test_setAggregator() public { address newAggregator = addr("newAggregator"); diff --git a/contracts/evm/test/SFFLServiceManager.t.sol b/contracts/evm/test/SFFLServiceManager.t.sol index e9256801..42d7af3e 100644 --- a/contracts/evm/test/SFFLServiceManager.t.sol +++ b/contracts/evm/test/SFFLServiceManager.t.sol @@ -46,6 +46,13 @@ contract SFFLServiceManagerHarness is SFFLServiceManager { ) public override onlyRegistryCoordinator { ServiceManagerBase.registerOperatorToAVS(operator, operatorSignature); } + + function registerOperatorToAVSWhitelisted( + address operator, + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature + ) public onlyRegistryCoordinator { + SFFLServiceManager.registerOperatorToAVS(operator, operatorSignature); + } } contract SFFLServiceManagerTest is TestUtils { @@ -55,6 +62,7 @@ contract SFFLServiceManagerTest is TestUtils { SFFLServiceManagerHarness public sfflServiceManager; SFFLTaskManager public taskManager; + SFFLOperatorSetUpdateRegistry operatorSetUpdateRegistry; address public serviceManagerOwner = address(uint160(uint256(keccak256("serviceManagerOwner")))); @@ -84,7 +92,7 @@ contract SFFLServiceManagerTest is TestUtils { vm.label(impl, "taskManagerImpl"); vm.label(address(taskManager), "taskManagerProxy"); - SFFLOperatorSetUpdateRegistry operatorSetUpdateRegistry = new SFFLOperatorSetUpdateRegistry(registryCoordinator); + operatorSetUpdateRegistry = new SFFLOperatorSetUpdateRegistry(registryCoordinator); address sfflServiceManagerImplementation = address( new SFFLServiceManagerHarness( @@ -111,6 +119,117 @@ contract SFFLServiceManagerTest is TestUtils { thresholdDenominator = taskManager.THRESHOLD_DENOMINATOR(); } + function test_initialize() public { + address newOwner = address(0x123); + IPauserRegistry newPauserRegistry = IPauserRegistry(address(0x456)); + + address impl = address( + new SFFLServiceManagerHarness( + IAVSDirectory(avsDirectoryMock), + registryCoordinator, + stakeRegistry, + taskManager, + SFFLOperatorSetUpdateRegistry(address(0)) + ) + ); + + SFFLServiceManagerHarness newServiceManager = SFFLServiceManagerHarness( + deployProxy( + impl, + address(proxyAdmin), + abi.encodeWithSignature("initialize(address,address)", newOwner, newPauserRegistry) + ) + ); + + assertEq(newServiceManager.owner(), newOwner); + assertEq(address(newServiceManager.pauserRegistry()), address(newPauserRegistry)); + } + + function test_onlyTaskManager_RevertWhen_NonTaskManagerCall() public { + address nonTaskManager = address(0x123); + vm.prank(nonTaskManager); + vm.expectRevert("Task manager must be the caller"); + sfflServiceManager.freezeOperator(address(0x456)); + } + + function test_constructor() public { + assertEq(address(sfflServiceManager.taskManager()), address(taskManager)); + assertEq(address(sfflServiceManager.operatorSetUpdateRegistry()), address(operatorSetUpdateRegistry)); + } + + function test_initialize_PauserSetToZero() public { + address newOwner = address(0x123); + + address impl = address( + new SFFLServiceManagerHarness( + IAVSDirectory(avsDirectoryMock), + registryCoordinator, + stakeRegistry, + taskManager, + SFFLOperatorSetUpdateRegistry(address(0)) + ) + ); + + vm.expectRevert("Pausable._initializePauser: _initializePauser() can only be called once"); + deployProxy(impl, address(proxyAdmin), abi.encodeWithSignature("initialize(address)", newOwner)); + } + + function test_initialize_PauserSetToPauserRegistry() public { + address newOwner = address(0x123); + IPauserRegistry newPauserRegistry = IPauserRegistry(address(0x456)); + + address impl = address( + new SFFLServiceManagerHarness( + IAVSDirectory(avsDirectoryMock), + registryCoordinator, + stakeRegistry, + taskManager, + SFFLOperatorSetUpdateRegistry(address(0)) + ) + ); + + SFFLServiceManagerHarness newServiceManager = SFFLServiceManagerHarness( + deployProxy( + impl, + address(proxyAdmin), + abi.encodeWithSignature("initialize(address,address)", newOwner, newPauserRegistry) + ) + ); + + assertEq(newServiceManager.owner(), newOwner); + assertEq(address(newServiceManager.pauserRegistry()), address(newPauserRegistry)); + } + + function test_registerOperatorToAVS_RevertWhen_NotWhitelisted() public { + address operator = address(0x789); + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature; + + vm.mockCall( + address(sfflServiceManager.operatorSetUpdateRegistry()), + abi.encodeWithSignature("isOperatorWhitelisted(address)", operator), + abi.encode(false) + ); + + vm.prank(address(registryCoordinator)); + vm.expectRevert("Not whitelisted"); + sfflServiceManager.registerOperatorToAVSWhitelisted(operator, operatorSignature); + } + + function testFail_registerOperatorToAVS_Whitelisted() public { + address operator = address(0x789); + ISignatureUtils.SignatureWithSaltAndExpiry memory operatorSignature; + + vm.mockCall( + address(sfflServiceManager.operatorSetUpdateRegistry()), + abi.encodeWithSignature("isOperatorWhitelisted(address)", operator), + abi.encode(true) + ); + + vm.prank(address(registryCoordinator)); + vm.expectRevert("Not whitelisted"); + sfflServiceManager.registerOperatorToAVSWhitelisted(operator, operatorSignature); + } + function test_updateStateRoot() public { StateRootUpdate.Message memory message = StateRootUpdate.Message({ rollupId: 0, diff --git a/contracts/evm/test/SFFLTaskManager.t.sol b/contracts/evm/test/SFFLTaskManager.t.sol index 493313ee..fe27e366 100644 --- a/contracts/evm/test/SFFLTaskManager.t.sol +++ b/contracts/evm/test/SFFLTaskManager.t.sol @@ -71,6 +71,17 @@ contract SFFLTaskManagerTest is TestUtils { thresholdDenominator = taskManager.THRESHOLD_DENOMINATOR(); } + function test_constructor() public { + SFFLTaskManagerHarness newTaskManager = + new SFFLTaskManagerHarness(registryCoordinator, TASK_RESPONSE_WINDOW_BLOCK); + + assertEq(newTaskManager.TASK_RESPONSE_WINDOW_BLOCK(), TASK_RESPONSE_WINDOW_BLOCK); + assertEq(address(newTaskManager.registryCoordinator()), address(registryCoordinator)); + + vm.expectRevert("Initializable: contract is already initialized"); + newTaskManager.initialize(pauserRegistry, registryCoordinatorOwner, aggregator, generator); + } + function test_createCheckpointTask_RevertWhen_CallerNotTaskGenerator() public { Checkpoint.Task memory task = Checkpoint.Task({ taskCreatedBlock: 100, @@ -693,6 +704,38 @@ contract SFFLTaskManagerTest is TestUtils { taskManager.verifyMessageInclusionState(message, taskResponse, proof); } + function test_verifyMessageInclusionState_stateRootUpdate_RevertWhen_InvalidSMTProof() public { + StateRootUpdate.Message memory message = StateRootUpdate.Message({ + rollupId: 10000, + blockHeight: 10001, + timestamp: 10002, + stateRoot: bytes32(0), + nearDaTransactionId: bytes32(0), + nearDaCommitment: bytes32(0) + }); + + bytes32[] memory sideNodes = new bytes32[](0); + + SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ + key: message.index(), + value: bytes32(0), + bitMask: 12, + sideNodes: sideNodes, + numSideNodes: 0, + nonMembershipLeafPath: bytes32(0), + nonMembershipLeafValue: bytes32(0) + }); + + Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ + referenceTaskIndex: 0, + stateRootUpdatesRoot: keccak256(hex"beef"), + operatorSetUpdatesRoot: keccak256(hex"f00d") + }); + + vm.expectRevert("Invalid SMT proof"); + taskManager.verifyMessageInclusionState(message, taskResponse, proof); + } + function test_verifyMessageInclusionState_operatorSetUpdate_Inclusion() public { RollupOperators.Operator[] memory operators = new RollupOperators.Operator[](0); OperatorSetUpdate.Message memory message = @@ -918,6 +961,33 @@ contract SFFLTaskManagerTest is TestUtils { taskManager.verifyMessageInclusionState(message, taskResponse, proof); } + function test_verifyMessageInclusionState_operatorSetUpdate_RevertWhen_InvalidSMTProof() public { + RollupOperators.Operator[] memory operators = new RollupOperators.Operator[](0); + OperatorSetUpdate.Message memory message = + OperatorSetUpdate.Message({id: 10001, timestamp: 10002, operators: operators}); + + bytes32[] memory sideNodes = new bytes32[](9); + + SparseMerkleTree.Proof memory proof = SparseMerkleTree.Proof({ + key: message.index(), + value: bytes32(0), + bitMask: 30, + sideNodes: sideNodes, + numSideNodes: 0, + nonMembershipLeafPath: bytes32(0), + nonMembershipLeafValue: bytes32(0) + }); + + Checkpoint.TaskResponse memory taskResponse = Checkpoint.TaskResponse({ + referenceTaskIndex: 0, + stateRootUpdatesRoot: keccak256(hex"beef"), + operatorSetUpdatesRoot: keccak256(hex"f00d") + }); + + vm.expectRevert("Invalid SMT proof"); + taskManager.verifyMessageInclusionState(message, taskResponse, proof); + } + function test_checkQuorum() public { uint32 taskCreationBlockNumber = 1000; bytes32 _msgHash = keccak256("test");